我需要更改ListView中元素的背景颜色取决于它们的状态。 lvLinks.getCount()返回正确的值。 “If-else”和日志也正常工作。但它不起作用(不改变背景的颜色)。请帮我!希望你能理解我的代码。
final Uri CONTACT_URI = Uri.parse("content://com.application.provider.LinkProvider/links");
ListView lvLinks;
Cursor cursor;
SimpleCursorAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.history);
lvLinks = (ListView) findViewById(R.id.lvLinks);
showListView(null);
setBackgroundColor();
lvLinks.setOnItemClickListener(this);
}
public void showListView(String order){
cursor = getContentResolver().query(CONTACT_URI, null, null,
null, order);
startManagingCursor(cursor);
int to[] = { android.R.id.text1, android.R.id.text2 };
String from[] = {"ref" , "status"};
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2, cursor, from, to);
lvLinks.setAdapter(adapter);
}
public void setBackgroundColor(){
for(int i = 0; i < lvLinks.getCount(); i++){
View v = lvLinks.getAdapter().getView(i, null, null);
Cursor cursor = (Cursor) lvLinks.getItemAtPosition(i);
int status = cursor.getInt(cursor.getColumnIndexOrThrow("status"));
Log.d("MYTAG", String.valueOf(status));
if (status == 1){
v.setBackgroundColor(Color.GREEN);
Log.d("MYTAG", "GREEN");
} else if (status == 2){
v.setBackgroundColor(Color.RED);
Log.d("MYTAG", "RED");
} else if (status == 3){
v.setBackgroundColor(Color.GRAY);
Log.d("MYTAG", "GRAY");
}
}
}
答案 0 :(得分:1)
首先:当您将联系人数据绑定到该行时,您的适配器应该处理设置视图的背景颜色。 SimpleCursorAdapter
没有逻辑可以做到这一点。您应该扩展CursorAdapter
并实施bindView()
以按照您希望的方式处理此问题。
第二:startManagingCursor()
已弃用。学习使用Loader
框架,特别是CursorLoader
。