gpt4 book ai didi

android - 膨胀到列表中的许多 View

转载 作者:行者123 更新时间:2023-11-30 04:06:17 27 4
gpt4 key购买 nike

我有一个 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();

}
}
}
}

任何帮助将不胜感激!

最佳答案

Android 在 ListView 中重用 View 。这就是为什么在 AdaptergetView(..) 方法中有一个 convertView。这篇 SO 帖子将解释:ListView reusing views when ... I don't want it to基本上您需要做的是保存当前展开的项目的 Set,并在您的 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 中,那么您想要添加它...

关于android - 膨胀到列表中的许多 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com