0

我正在尝试根据特定条件仅更改一个(可能更多) 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 文件。

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

4

2 回答 2

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);
    }
}
于 2012-07-16T22:22:57.653 回答
0

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

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

希望有所帮助:)

于 2012-07-16T22:19:05.250 回答