我有一个由SimpleCursorAdapter和自定义ViewBinder支持的ListView。我想让这个列表视图中的项目在点击时改变它们的颜色。如果我在OnClickListener中执行此操作 - 它会在paritally工作,更改单击项目的颜色,以及列表中的项目的颜色,每个7(我猜,时间段取决于列表视图的可视区域)。
任何人都可以建议如何处理这个问题?或者,也许指向一个更优雅的方式使listView中的项目可选?
谢谢。
UPD :(抱歉格式错误 - 这是我第一次发帖):
以下是我尝试将ListView中的项目“选中”的方式:
private void setupListView(final ListView lv) {
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
RelativeLayout layout = (RelativeLayout) view;
int color;
if (conditionMet) {
color = R.color.gray;
} else {
color = R.color.red;
}
for(int i = 0; i < layout.getChildCount(); i++) {
((TextView)layout.getChildAt(i)).setTextColor(getResources().getColor(color));
}
return;
}}
这是我启动适配器的方式:
final SimpleCursorAdapter adapter =
new SimpleCursorAdapter(
this,
itemId,
cursor,
from,
to
);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
final TextView textView = (TextView) view;
// do necessary conversions
return true;
}
});
listView.setAdapter(adapter);
答案 0 :(得分:0)
您可以使用属性android:listSelector设置主题或列表中当前所选项目的任何可绘制或颜色。
答案 1 :(得分:0)
由于没有其他答案,而且,我认为,我在下面的建议中遇到了一些麻烦,我发布了我是如何做到的:
我存储了在特殊地图中点击的项目的ID
我检查刚刚点击的项目的ID是否在地图中:如果是,我删除它并使项目及其子项颜色为A,否则我将id添加到地图中将颜色设置为B
public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
Context ctx = MainActivity.this;
RelativeLayout layout = (RelativeLayout) view;
try {
int color;
if (items.containsKey(id)) {
items.remove(id);
color = R.color.gray;
tempIds.remove(id);
} else {
items.put(id, sum);
color = R.color.red;
tempIds.add(id);
}
for (int i = 0; i < layout.getChildCount(); i++) {
final TextView textView = (TextView) layout.getChildAt(i);
textView.setTextColor(getResources().getColor(color));
}
} catch (ParseException e) {
Log.e(MainActivity.class.toString(), "Exception parsing", e);
}
return;
}
}