我的问题类似于ListView getChildAt returning null for visible children,但是尽管搜索我找不到解决方案。
我有一个带有Scroll的ListView
。 ListView
有10个项目,其中7个是可见的,3个是通过滚动隐藏的。我还有一个外部方法(在适配器之外)必须从ListView
获取所有孩子(例如使用getChildAt()
)。
我需要所有10个项目,但最后3个是null
个对象。我尝试过如下代码:
getListView().smoothScrollToPosition();
但这不起作用。
我认为我不需要发布我的其余代码,因为描述说明了所有内容?
答案 0 :(得分:3)
正如您已经看到的那样,您无法从ListView
获取所有子行视图,因为ListView
仅包含可见行的视图(加上一些已回收的行,但您可以'达到那些)。做你想做的事的正确方法是在适配器的数据中存储任何数据并从那里检索它。
但ListView不保留RadioGroup中的当前值 运行时间。
我已经看到你遇到了一些问题所以我已经修改了一些旧的代码来构建一个基本的例子,代码可以find here。
答案 1 :(得分:2)
我不这么认为你需要为listView添加滚动视图。滚动自动适用于ListView。尝试使用您的应用程序而不添加滚动视图,我相信它会按您的需要工作。
答案 2 :(得分:1)
listView的不可见子元素实际上并不存在。当它们变得可见时,其中一个冗余视图将被回收或生成新视图。所以你实际上无法访问所有视图。你为什么这么想?无论您想要对填充视图而不是视图本身的数据进行任何更改。
答案 3 :(得分:0)
这些孩子为空的原因是因为他们确实不存在而且他们永远不会存在,如果一次只有7个孩子在屏幕上,系统将只创建7并通过传递{{1返回适配器convertView
方法。
如果要获取有关整个数据集的信息,则应搜索数据集本身,而不是屏幕上的视图。例如。如果是ArrayAdapter,则循环数组;如果它是CursorAdapter,则循环光标;等
答案 4 :(得分:0)
有几点你需要照顾: 1.列表视图提供内置滚动功能,因此不要使用滚动视图。它只会搞砸事情。 2.列表视图不包含所有子项。滚动时,它仅在运行时创建可见项。 3.如果你想完全让所有的孩子,最好保留你的列表所具有的子对象的ArrayList。您可以根据需要在此ArrayList中添加或删除子项。