如何获取ListView项的视图?

时间:2011-03-25 13:53:49

标签: android listview

我有两个ListViews(A和B),包含相同类型的项目(我创建的类)

当我点击A中的某个项目时,它会在B上添加此对象,如果我再次单击它会将其删除。 仅在选择项目时,我使用view.setBackgroundColor(myColor)更改其背景。

我希望能够从列表B中删除该项目(它有效),但我还想重置背景颜色。我无法弄清楚如何获取我正在移除的这个项目的视图。

有什么想法吗?

3 个答案:

答案 0 :(得分:10)

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

除此之外,由于ListView创建和重用视图的方式,如果您只是直接修改视图,您将看到一些奇怪的,不良影响。当用户滚动列表时,变为可见的项目将错误地以与其他可见部分之外的项目相同的背景结束。

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

  1. 向数据对象添加另一个布尔成员,类似isInSecondList
  2. 覆盖适配器中的getView()。在getView()中,根据项目isInSecondList的值,将背景设置为正常或突出显示。
  3. 在第二个列表中添加或删除项目时,更新数据对象以反映更改,然后调用适配器的notifyDataSetChanged()

答案 1 :(得分:5)

int position = 0;
listview.setItemChecked(position, true);
View wantedView = adapter.getView(position, null, listview);

答案 2 :(得分:0)

这就是我做的事情

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

}