Android 改变;listitem";listview中的引用

Android 改变;listitem";listview中的引用,android,listview,Android,Listview,我的ListActivity中有一个ListView,它通过适配器充气。有一个处理程序,我调用它的postDelayed()方法来递归地运行列表视图的refresh()(借助notifyDataSetChanged())postDealyed()设置为1秒 现在,此列表视图的所有项目/行都有上下文菜单 我想使用此代码(获取“长按”行/项的位置)将行/项的背景与其ContextMenu分开设置: 当我运行应用程序时,所选行的背景会发生变化(应该如此),但每隔一秒钟(因此每次刷新列表视图时),其中的

我的
ListActivity
中有一个
ListView
,它通过适配器充气。有一个
处理程序
,我调用它的
postDelayed()
方法来递归地运行
列表视图的
refresh()
(借助
notifyDataSetChanged()
)<代码>postDealyed()
设置为1秒

现在,此
列表视图的所有项目/行都有
上下文菜单

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

当我运行应用程序时,所选行的背景会发生变化(应该如此),但每隔一秒钟(因此每次刷新
列表视图时),其中的另一行会发生变化,所选行会变回其原始状态。再过一秒钟,一切又变了回来。如果我滑过
列表视图的行,其他行也会闪烁。就像参考资料在变化或者我真的不知道一样。如果我停止滑动,闪烁的背景会有一个图案,直到下一张幻灯片出现另一个图案

有什么想法吗?
提前谢谢

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

Hm,我认为这可以解决问题,但我已按照您的建议编辑了代码,问题仍然存在。现在,适配器检查行是否需要其他背景。如果需要,适配器将用setBackgroundColor覆盖背景。如果我滑动ListView,同样的闪光点仍然存在。但是,如果我不仅覆盖需要高亮显示的行的背景,而且覆盖适配器中的所有行的背景(例如,其他行为黑色),它将起作用,但随后我失去了行的原始onlongpress视觉行为。我知道我可以将它们更改为原来的样子,但如果我不必设置其他行的背景,那就更好了。无论如何,我将代码移到了适配器上,不仅设置了一个ConvertView,还设置了所有其他背景/选择器等。这取决于是否需要高亮显示。是的,一旦你的逻辑正确,你就可以进入下一步:使用背景色选择器。看见
  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;
  ...