膨胀到列表中的许多视图

时间:2012-07-22 18:54:11

标签: android listview reference inflate

我有一个listView,并希望在按下它时展开每个项目。我有以下代码来执行此操作。我通过膨胀ViewStub来工作。

工作正常。也就是说,当我按下列表项时,它确实会膨胀。到目前为止一切都很好。

但是,我的列表很长,我注意到当我向下滚动列表时,其他项目也已经膨胀了。我不完全确定为什么。当我再次向上滚动时,我最初按下的项目已“缩小”,而其他一些项目则变得膨胀。

@override
public void onListItemClick(ListView l, View v, int position, long id) {


    ListView list = getListView();
    int start = list.getFirstVisiblePosition();
    for (int i = start, j = list.getLastVisiblePosition(); i <= j; i++) {
        Cursor item = (Cursor) list.getItemAtPosition(i);

        if (id == item.getLong(item.getColumnIndex(ItemColumns._ID))) {
            View view = list.getChildAt(i - start);

            ViewStub stub = (ViewStub) view.findViewById(R.id.stub);
            if (stub != null) {
                stub.inflate();

            }       
        }
    }
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

Android会在ListView中重复使用观看次数。这就是convertView getView(..)方法Adapter中存在Set的原因。这篇SO帖子将解释:ListView reusing views when ... I don't want it to 基本上您需要做的是保留当前展开的getView(..)项,并在if(mExpanded.contains(getItem(position))) { //show expansion } else { //hide expansion } 方法中进行查找:

onListItemClick

然后在您的if(!mExpanded.remove(getListView().getItem(position))) { mExpanded.add(getListView().getItem(position)); } 方法中添加以下内容:

Set

这会导致它尝试删除该项目,如果Set未更改 - 那么该项目不在要删除的{{1}}中,那么您要添加它...