我想更改列表视图中单行的颜色。
我已经制作了一个自定义适配器,我希望在行的上下文菜单中更改颜色:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case NOTE_BACKGROUND:
AdapterContextMenuInfo infos = (AdapterContextMenuInfo) item.getMenuInfo();
getListView().getAdapter().getView(infos.position, null,null).setBackgroundColor(Color.GREEN);
notes.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
但它不起作用......我不知道为什么......任何想法?非常感谢。
答案 0 :(得分:1)
你不应该自己在适配器上调用getView()
,让ListView
调用它。此外,当您在一个视图上设置颜色,然后滚动列表时,相同的彩色视图将再次出现(由ListView
重新用于另一个项目。)
使用Map<Integer,Color>
存储适配器的项目索引和颜色。
覆盖适配器的getView()
,并从此Map设置返回视图的颜色。
在上下文菜单中选择,将索引和颜色放到Map中,然后在Adapter上调用notifyDataSetChanged()
。
答案 1 :(得分:0)
执行notifyDataSetChanged
时,将重绘所有视图,适配器将返回行的新视图。如果是自定义适配器,则应该在适配器中有一个字段,用于存储要更改背景颜色的行的索引(或类似的东西),然后相应地返回正确的视图。