使用上下文菜单动态更改ListView行上的背景颜色

时间:2013-01-04 11:32:40

标签: android listview colors row

我想更改列表视图中单行的颜色。

我已经制作了一个自定义适配器,我希望在行的上下文菜单中更改颜色:

@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);
}

但它不起作用......我不知道为什么......任何想法?非常感谢。

2 个答案:

答案 0 :(得分:1)

你不应该自己在适配器上调用getView(),让ListView调用它。此外,当您在一个视图上设置颜色,然后滚动列表时,相同的彩色视图将再次出现(由ListView重新用于另一个项目。)

使用Map<Integer,Color>存储适配器的项目索引和颜色。

覆盖适配器的getView(),并从此Map设置返回视图的颜色。

在上下文菜单中选择,将索引和颜色放到Map中,然后在Adapter上调用notifyDataSetChanged()

答案 1 :(得分:0)

执行notifyDataSetChanged时,将重绘所有视图,适配器将返回行的新视图。如果是自定义适配器,则应该在适配器中有一个字段,用于存储要更改背景颜色的行的索引(或类似的东西),然后相应地返回正确的视图。