2013-01-04 25 views
0

我想更改列表视图上单行的颜色。使用上下文菜单动态更改ListView行的背景颜色

我做了一个自定义适配器,我想该行的上下文菜单上的变化去色:

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

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

回答

1

您不应该在Adapter上自己拨打getView(),让ListView称它。此外,当您在一个视图上设置颜色,然后滚动列表时,相同颜色的视图将再次出现(由ListView重新使用)以获取另一个项目。

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

覆盖Adapter的getView(),并从该Map设置返回视图的颜色。

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

0

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