在我的列表视图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);
}
}
答案 0 :(得分:1)
具有一个名为counter或诸如此类的int变量,并在代码开始时以及有新标头时将其设置为0。
然后,每行将计数器加一,如果计数器为偶数,则将背景变为蓝色。
即。
counter = 0;
for each item in the list view {
if (isHeader) {
counter = 0;
} else {
if (counter % 2 = 0) {
background = blue;
}
else {
background = white;
}
counter++;
}
}
答案 1 :(得分:1)
以下内容基于此处的答案:Alternating colors in listview but needs to have a starting color
更改:
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进行设置即可。
希望有帮助!