如何更改特定的一个ListView行的颜色/图片 - Android?

时间:2012-07-16 22:10:26

标签: android android-listview listactivity

我正在尝试根据特定条件更改一个(可能更多)ListView行。我已经阅读了很多关于类似问题和其他教程的答案,但我无法做任何事情。

我想要实现的是当SQLite中的行设置为特定值时,将行背景(更简单的版本)或行图片(我认为更难的版本)设置为与其他行不同。

我有扩展ListActivity的Activity,我正在设置ListView适配器:

private void refreshList() {
    mySQLiteAdapter = new MyDBAdapter(this);
    mySQLiteAdapter.open();
    String[] columns = { MyDBAdapter.KEY_TITLE, MyDBAdapter.KEY_GENRE,
            MyDBAdapter.KEY_PRICE, MyDBAdapter.KEY_ID };

    Cursor contentRead = mySQLiteAdapter.getAllEntries(false, columns,
            null, null, null, null, MyDBAdapter.KEY_TITLE, null);

    SimpleCursorAdapter adapterCursor = new SimpleCursorAdapter(this,
            R.layout.row, contentRead, columns, new int[] {
                    R.id.text1, R.id.detail });

    this.setListAdapter(adapterCursor);
    mySQLiteAdapter.close();
}

在onCreate方法和onResume中调用此函数。我想设置行的不同颜色/图像,其中列MyDBAdapter.KEY_PRICE的值等于5. R.layout.row是我的带行设计的xml文件。

也许有人可以帮我这个?或至少显示描述它的教程?

2 个答案:

答案 0 :(得分:3)

只需扩展SimpleCursorAdapter并覆盖bindView():

public class MyAdapter extends SimpleCursorAdapter {
    public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);
        if(cursor.getLong(cursor.getColumnIndex(MyDBAdapter.KEY_PRICE)) == 5)
            view.setBackgroundColor(0xff00ff00);
        else // this will be the default background color: transparent
            view.setBackgroundColor(0x00000000);
    }
}

答案 1 :(得分:0)

您可以尝试创建在SimpleCursorAdapter上扩展的自定义适配器,在其中,在方法bindView上,您可以查看您查找的条件是否已完成并在该方法上实现所需的内容。

http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html#bindView(android.view.View, android.content.Context, android.database.Cursor)

希望能提供帮助:)