0

我正在尝试创建一个从我的 SQLite 数据库中生成的列表视图。我目前将代码设置为仅相应地显示每一行并用数据填充 3 个文本视图。我希望能够使用某种 If 语句来检查其中一个值是否为“Room1”,然后将该行的背景设置为某种颜色。

这样,列表中的每一行将根据数据的“房间”具有不同的背景。

我尝试过扩展 SimpleCursorAdapter,但我对如何从中获得我想要的东西有点迷茫。

这是我目前为 SimpleCursorAdapter 提供的内容:

Cursor notesCursor = myDbHelper.fetchDayPanelNotes(type, day);
startManagingCursor(notesCursor);
String[] from = new String[]{DataBaseHelper.KEY_NAME, DataBaseHelper.KEY_ROOM, DataBaseHelper.KEY_TIME};

int[] to = new int[]{R.id.text1, R.id.text2, R.id.text3};

SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.main_row, notesCursor, from, to);
setListAdapter(notes);
4

4 回答 4

9

您应该覆盖getView适配器的方法:

SimpleCursorAdapter notes = new SimpleCursorAdapter(
        this, R.layout.main_row, notesCursor, from, to)
{
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        final View row = super.getView(position, convertView, parent);
        if (position % 2 == 0)
            row.setBackgroundResource(android.R.color.darker_gray);
        else
            row.setBackgroundResource(android.R.color.background_light);
        return row;
    }
};

并根据位置设置行的背景(是奇数还是偶数)。

于 2011-05-02T19:15:36.680 回答
2

这应该这样做。感谢这篇文章,我遇到了完全相同的问题,但是在经历了这个之后,问题解决了,如下所示,

    SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to)
    {
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            cursor.moveToPosition(position);
            String s = cursor.getString(mursor.getColumnIndex("roomnumber"));
            final View row = super.getView(position, convertView, parent);

            if (s.equalsIgnoreCase("room1"))
                row.setBackgroundColor(Color.parseColor("#480000"));
            else if (s.equalsIgnoreCase("room2"))
                row.setBackgroundColor(Color.parseColor("#000040"));
            else 
                row.setBackgroundColor(Color.parseColor("#004000"));
            return row;
        }
    };       


    setListAdapter(notes);
于 2012-06-13T19:41:22.483 回答
1

我在我的 Activity 上实现 SimpleCursorAdapter.ViewBinder 然后覆盖 setViewValue ...

public class MyActivity extends Activity
    implements SimpleCursorAdapter.ViewBinder {

    SimpleCursorAdapter myAdapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState)

        // Initialize myAdapter
        myAdapter.setViewBinder(this);
    }

    @Override
    public boolean setViewValue(View view, Cursor cursor, int column) {
        // Put code to process row data here
    }
}
于 2011-05-02T19:33:20.827 回答
0

我建议BaseAdapter手动扩展、填充列表数据并在适配器类中保留该数据的本地副本。然后,当您实现该getView(...)方法时,您可以使用View您正在生成的位置或 ID 来获取相应的数据以检查“Room1”,并View根据该比较更改您返回的数据。

rekaszeru 的回答有完全正确的想法,但听起来你需要比职位和 ID 更多的信息,这就是为什么我建议降低一个级别并BaseAdapter直接实施。

于 2011-05-02T19:18:22.417 回答