更改listview中的“listitem”引用

时间:2011-06-15 23:05:14

标签: android listview

我的ListView中有ListActivity,其中有一个适配器充气。有一个Handler,我称其postDelayed()方法以refresh()的递归方式运行ListView(在notifyDataSetChanged()的帮助下)。 postDealyed()设置为1秒。

现在,ContextMenus的所有项目/行都有ListView

我想使用此代码(获取“longpressed”行/项目的位置)将行/项目的背景与其ContextMenu分开设置:

  public boolean onContextItemSelected(MenuItem item) {
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
  ...
    case R.id.highlight:
        ListView lv = (ListView)getListView();
        View row = (View) lv.getChildAt(info.position);
        row.setBackgroundColor(Color.argb(255, 22, 100, 100));
      return true;
  ...

当我运行应用程序时,所选行的背景会发生变化(应该如此),但每秒(所以每次刷新ListView时)它的另一行都会发生变化,所选行会变回其原始行州。又一秒后,一切都变回来。如果我滑过ListView行的其他行也会闪烁。就像引用正在改变或我真的不知道。如果我停止滑动闪烁的背景有一个模式,直到下一张幻灯片获得另一个模式。

有什么想法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

那是因为你的意见被回收了。您的“突出显示”代码需要更新列表项的支持模型并将其“突出显示”属性设置为true,它不应该直接更改View。当您渲染项目(在适配器中)时,检查此属性是否为真,如果是,则使用您指定的背景,否则将其设置为默认值。