如何更改ListView中元素的背景颜色(来自ContentProvider的数据)?

时间:2016-10-10 04:14:30

标签: android listview android-contentprovider

我需要更改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");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

首先:当您将联系人数据绑定到该行时,您的适配器应该处理设置视图的背景颜色。 SimpleCursorAdapter没有逻辑可以做到这一点。您应该扩展CursorAdapter并实施bindView()以按照您希望的方式处理此问题。

第二:startManagingCursor()已弃用。学习使用Loader框架,特别是CursorLoader