0

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

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

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

但它不起作用......我不知道为什么......有什么想法吗?多谢。

4

2 回答 2

1

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

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

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

在上下文菜单中选择,将索引和颜色放入地图,然后调用notifyDataSetChanged()适配器。

于 2013-01-04T11:40:02.253 回答
0

当您这样做时notifyDataSetChanged,所有视图都将被重绘,并且适配器将为行返回新视图。如果它是自定义适配器,您应该在适配器中有一个字段,用于存储要更改背景颜色(或类似内容)的行的索引,然后相应地返回正确的视图。

于 2013-01-04T11:37:24.113 回答