如何获得ListView项目的视图?

我有两个ListView(A和B)与相同types的项目(我创build一个类)

当我点击A中的一个项目时,它会在B上添加这个对象,如果我再次点击,它将会删除它。 只有当select一个项目时,我使用view.setBackgroundColor(myColor)更改其背景。

我希望能够从列表B中删除项目(它的工作原理),但我也想重置背景颜色。 我无法弄清楚如何得到我正在删除的这个项目的视图。

有任何想法吗?

Solutions Collecting From Web of "如何获得ListView项目的视图?"

不能保证任何特定的ListView项目在任何时候都会有视图。 如果该项目目前在屏幕外,则可能没有视图。 由于特定项目可能没有视图,因此尝试获取项目视图可能没有任何意义。

除此之外,由于ListView创build和重用视图的方式,如果您直接修改视图,将会看到一些奇怪的不良效果。 当用户滚动浏览列表时,变得可见的项目将错误地以与已经落在可见部分之外的其他项目相同的背景结束。

我不知道接下来是否是实现您的function的最佳方式,因为我不知道更改后重build列表的成本。 这是(可能是天真的)我会这样做的方式:

  1. 将另一个布尔成员添加到您的数据对象,如isInSecondList
  2. 覆盖适配器中的getView() 。 在getView() ,根据项目的isInSecondList的值将背景设置为普通或高亮。
  3. 当从第二个列表中添加或删除项目时,更新数据对象以反映更改,然后调用适配器的notifyDataSetChanged()
 int position = 0; listview.setItemChecked(position, true); View wantedView = adapter.getView(position, null, listview); 

这是我做的

 private View oldSelection; @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { highlightSelectdListItem(position); } public void highlightSelectdListItem(int position) { clearPreviousSelection(); View newsItemView = mGridVIew.getChildAt(position); oldSelection = newsItemView; newsItemView.setBackgroundColor(Color.GRAY); } public void clearPreviousSelection() { if (oldSelection != null) { oldSelection.setBackgroundColor(Color.TRANSPARENT); } }