我正在尝试根据我的SQLite DB中的信息创建一个列表视图。我目前设置的代码只是相应地显示每一行,并用数据填充3个textviews。我希望能够使用某种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);
答案 0 :(得分: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;
}
};
并根据位置设置行的背景(是奇数还是偶数)。
答案 1 :(得分: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);
答案 2 :(得分: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
}
}
答案 3 :(得分:0)
我建议扩展BaseAdapter
,手动填充列表数据并在适配器类中保留该数据的本地副本。然后,当您实施getView(...)
方法时,您可以使用您生成的View
的位置或ID来获取相应的数据以检查“Room1”,并更改View
您基于该比较返回。
rekaszeru的答案有正确的想法,但听起来你需要的信息比位置和ID更多,这就是为什么我建议降低一级并直接实现BaseAdapter
。