android - Listview中的交替颜色
问题描述
在我的列表视图getView
中,我有这样的代码
if (position % 2 == 0) {
v.setBackgroundColor(Color.BLUE);
}
这就是结果
但是如果数据看起来像这样怎么办
我尝试了上面的代码,但它看起来像这样
但我需要是这样的。
我不知道出了什么问题,但颜色图案每组都会交换。如何根据最后一种格式修复它。总是以蓝色开头
更新
ItemModel.java
public class ItemModel implements Comparable<ItemModel> {
private boolean isSectionHeader;
private String cusname;
private String date;
}
public String getCusname() {
return cusname;
}
public void setCusname(String cusname) {
this.cusname = cusname;
}
public boolean isSectionHeader() {
return isSectionHeader;
}
@Override
public int compareTo(ItemModel itemModel) {
return this.date.compareTo(itemModel.date);
}
public void setToSectionHeader() {
isSectionHeader = true;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getRemarks() {
return remarks;
}
public ItemModel(String cusname, String remarks, String date) {
this.isSectionHeader = isSectionHeader;
this.cusname = cusname;
this.remarks = remarks;
this.date = date;
}
这是我将数据从 sqllite 传输到数组的地方
private ArrayList<ItemModel> getItems() {
Cursor data = myDb.get_plan(pattern_email);
ArrayList<ItemModel> items = new ArrayList<>();
while (data.moveToNext()) {
String cusname = data.getString(0);
String remarks = data.getString(2);
String date = data.getString(3);
items.add(new ItemModel(cusname, remarks, date));
}
return items;
}
这是列表视图中的排序器和显示
private ArrayList sortAndAddSections(ArrayList<ItemModel> itemList) {
ArrayList<ItemModel> tempList = new ArrayList<>();
ArrayList<Integer> tmpHeaderPositions = new ArrayList<>();
Collections.sort(itemList);
ItemModel sectionCell;
String header = "";
int addedRow = 0;
for (int i = 0; i < itemList.size(); i++) {
if (!(header.equals(itemList.get(i).getDate()))) {
String cusname = itemList.get(i).getCusname();
String remarks = itemList.get(i).getRemarks();
sectionCell = new ItemModel(cusname, remarks, date);
sectionCell.setToSectionHeader();
tmpHeaderPositions.add(i + addedRow);
addedRow++;
tempList.add(sectionCell);
header = itemList.get(i).getDate();
}
tempList.add(itemList.get(i));
}
tmpHeaderPositions.add(tempList.size());
for (int i = 0; i < tmpHeaderPositions.size() - 1; i++) {
sectionCell = tempList.get(tmpHeaderPositions.get(i));
sectionCell.setDate(sectionCell.getDate() + " (" +
(tmpHeaderPositions.get(i + 1) - tmpHeaderPositions.get(i) - 1) + ")");
}
return tempList;
}
这是我的看法
public View getView(int position, View convertView, ViewGroup parent) {
/* Alternating Colors*/
LinearLayout line_others = v.findViewById(R.id.line_others);
if (position % 2 == 0) {
line_others.setBackgroundResource(R.color.red);
} else {
line_others.setBackgroundResource(R.color.alt_gray);
}
}
解决方案
以下基于此处的答案:Alternating colours in listview but need to have a starting color
- 在 ItemModel中添加一个新的 int 字段bgColor并创建 getter 和 setter 方法。
改变:
private ArrayList sortAndAddSections(ArrayList<ItemModel> itemList) { ArrayList<ItemModel> tempList = new ArrayList<>(); ArrayList<Integer> tmpHeaderPositions = new ArrayList<>(); Collections.sort(itemList); ItemModel sectionCell; String header = ""; int addedRow = 0; int bgColor = R.color.red; //Added for (int i = 0; i < itemList.size(); i++) { if (!(header.equals(itemList.get(i).getDate()))) { String cusname = itemList.get(i).getCusname(); String remarks = itemList.get(i).getRemarks(); sectionCell = new ItemModel(cusname, remarks, date); sectionCell.setToSectionHeader(); tmpHeaderPositions.add(i + addedRow); addedRow++; tempList.add(sectionCell); header = itemList.get(i).getDate(); bgColor = R.color.red; //Added } sectionCell = itemList.get(i); //Added sectionCell.setBgColor(bgColor); //Added tempList.add(sectionCell); //Changed if (bgColor == R.color.red) bgColor = R.color.alt_gray; //Added else bgColor = R.color.red; //Added } tmpHeaderPositions.add(tempList.size()); for (int i = 0; i < tmpHeaderPositions.size() - 1; i++) { sectionCell = tempList.get(tmpHeaderPositions.get(i)); sectionCell.setDate(sectionCell.getDate() + " (" + (tmpHeaderPositions.get(i + 1) - tmpHeaderPositions.get(i) - 1) + ")"); } return tempList; }
更改适配器 getView()。不再计算背景颜色,只需使用数据项中的 bgColor 设置即可。
希望有帮助!
推荐阅读
- macos - 我无法在 MAC 上的 Visual Studio 上使用 Android 模拟器运行 Xamarin 新项目。但是IOS模拟器有效
- android - 如何从一个活动导航到另一个活动到android中的特定片段
- c++ - 将 Unicode 文本放在具有 NULL 所有者窗口的剪贴板上时出现意外行为
- javascript - 以编程方式将对象推送到数组中
- c - 这可能是什么排序算法?
- artificial-intelligence - 我怎样才能让敌人在 Godot 中产生并被吸引/旅行到一个静止点?
- python - 如何删除 django UserCreationForm 中的密码确认字段
- mysql - 有没有办法在服务器启动后自动执行 MySQL 过程
- python - 根据条件在 Pandas DataFrame 中创建新行
- java - spring boot application.properties中配置thymeleaf文本模板失败