【发布时间】:2018-01-02 17:23:28
【问题描述】:
我有一个代码,每个视图都有不同的背景
当我向上和向下滚动时,所有颜色都会混淆,所有CheckBoxes 标记都会发生变化,当我擦除一部分时,会擦除其他部分并改变颜色。
如果你需要完整的代码,请告诉我
这是更改背景颜色的代码:
View v = List.getChildAt(index -
List.getFirstVisiblePosition());
if(v == null)
return;
ConstraintLayout LayoutT = v.findViewById(R.id.LayoutT);
LayoutT.setBackgroundColor(Color.RED);
这个删除代码:
CheckBox currentCheckBox = (CheckBox) view.findViewById(mCheckBoxView);
currentCheckBox.setChecked(mCheckBoxStates[csr.getPosition()]);
currentCheckBox.setTag(new Long(csr.getLong(csr.getColumnIndex(DatabaseHandler.KEY_ID))));
currentCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
final int position = fcsr.getPosition();
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckBoxStates[position] = ((CheckBox) buttonView).isChecked();
int restore_cursor_position = fcsr.getPosition();
fcsr.moveToPosition(position);
fcsr.moveToPosition(restore_cursor_position); //restore the Cursor's position
}
});
another class:
for (long id : mCheckedIdList) {
mDBHandler.deleteRecord(id);
}
db.beginTransaction();
db.setTransactionSuccessful();
db.endTransaction();
mCsr = mDBHandler.getAllRecords();
mMCA.swapCursor(mCsr);
编辑
我试着按照你最初的建议去做。它工作得很好,但是当我将它调整为我的代码时,只出现一种颜色,它会根据最后一种颜色或应该出现的第一种颜色而变化
@Override
public View getView(int position, View view, ViewGroup parent) {
View convertview = super.getView(position, view,parent);
parent.setBackgroundColor(0xFF555555);
// LinearLayout ll = (LinearLayout)
convertview.findViewById(R.id.item_layout);
int[] colours = new int[]{
ContextCompat.getColor(mContext, R.color.Cyan)
, ContextCompat.getColor(mContext, R.color.LowRed)
};
if (convertview != null) {
DatabaseHandler db = new DatabaseHandler(mContext);
int Count = List.getCount();
String[] Status = new String[Count];
for (int i = 0; i < Count; ) {
Cursor c = db.getCursorStatus(i);
if (c != null) {
while (c.moveToNext()) {
Status[i] = c.getString(0);
}
}
String mStatus[] = new String[3];
mStatus[0] = "Monetary_Expenditure";
mStatus[1] = "Financial income";
mStatus[2] = "Cancellation";
boolean first = Status[i] != null && Status[i].equals(mStatus[1]);
boolean second = Status[i] != null && Status[i].equals(mStatus[0]);
if (Status[i] != null && Status[i].equals(mStatus[1])) {
convertview.setBackgroundColor(colours[1]);
} else if (Status[i] != null && Status[i].equals(mStatus[0])) {
convertview.setBackgroundColor(colours[0]);
}
else {convertview.setBackgroundColor(0xFF555555);}
i++;
}
}
return convertview;
}
编辑 2
我改了:
if (convertview != null) {
Cursor csr = getCursor();
String status = csr.getString(0);
int colourindex = 0;
if (status.equals("Financial income") {
colourindex = 1;
}
if (status.equals("Cancellation") {
colourindex = 2;
}
convertview.setBackgroundColor(colours[colourindex]);
}
到:
if (convertview != null) {
Cursor csrF = getCursor();
DatabaseHandler db = new DatabaseHandler(mContext);
i++;
Cursor csr = db.getCursorStatus(i);
String status = csr.getString(0);
int colourindex = 0;
if (status.equals("Financial income")) {
colourindex = 1;
}
if (status.equals("Cancellation")) {
colourindex = 2;
}
convertview.setBackgroundColor(colours[colourindex]);
}
因为光标没有转到右行
我得到这个错误:android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
编辑 3
Cursor csr = getCursor();
String status="";
while (csr.moveToNext()) {
status = csr.getString(4);
}
int colourindex = 3;
if ("Monetary Expenditure".equals(status)){
colourindex = 0;
}
else if ("Financial income".equals(status)) {
colourindex = 1;
}
else if ("Cancellation".equals(status)) {
colourindex = 2;
}
convertview.setBackgroundColor(colours[colourindex]);
Log.i("Debug", "colour index is: "+colourindex);
【问题讨论】:
-
列表视图旨在重复自身。为每一行创建一个全新的视图会占用系统太多的内存。话虽如此,你想完成什么?
-
我想用相同的设计制作 X 布局(布局数组):5 TextField 1 和 Checkbox 和背景颜色 X。现在我想创建其中一些布局并将每个信息放在不同但每个人的背景颜色会有所不同。抱歉,如果我没有正确解释自己。