6

我的问题类似于ListView getChildAt 返回 null for visible children,但尽管搜索我找不到解决方案。

我有一个ListView带卷轴的。有 10 个项目,其中ListView7 个可见,3 个被滚动隐藏。我还有一个外部方法(适配器外),它必须从中获取所有子项ListView(例如 using getChildAt())。

我需要所有 10 个项目,但最后 3 个是null对象。我尝试过如下代码:

getListView().smoothScrollToPosition();

但这不起作用。

我认为我不需要发布我的其余代码,因为描述说明了一切?

4

5 回答 5

3

正如您已经看到的,您无法从 a 获取所有子行视图,ListView因为 aListView仅包含可见行的视图(加上一些回收的行,但您无法访问这些行)。做你想做的事情的正确方法是将任何数据存储在适配器的数据中并从那里检索它。

但是 ListView 不会在运行时保留 RadioGroup 的当前值。

我已经看到您对此有一些问题,因此我修改了一些旧代码来构建一个基本示例,您可以在此处找到代码。

于 2012-12-19T21:03:12.413 回答
2

我不认为你需要为 listView 添加滚动视图。滚动在 ListView 上自动工作。在不添加滚动视图的情况下尝试您的应用程序,我相信它会按您的需要工作。

于 2012-12-19T11:02:53.877 回答
1

那些孩子为空的原因是因为他们真的不存在并且他们永远不会存在,如果一次只有7个孩子在屏幕上,系统将只创建7个并通过convertView返回给适配器getView()方法来重新使用。

如果您想获取有关整个数据集的信息,您应该搜索数据集本身,而不是屏幕上的视图。例如,如果它是一个 ArrayAdapter,则循环该数组;如果是 CursorAdapter,则循环光标;等等

于 2012-12-19T11:09:06.857 回答
1

listView 的不可见子项实际上并不存在。当它们变得可见时,将回收其中一个冗余视图或生成一个新视图。因此,您实际上无法访问所有视图。你为什么想要?无论您想要进行什么更改,都应该对填充视图的数据而不是视图本身进行。

于 2012-12-19T11:13:38.550 回答
0

有几点需要注意: 1. 列表视图提供了内置的滚动功能,所以不要使用滚动视图。它只会把事情搞砸。2. 列表视图不包含所有的孩子。当您滚动它时,它只会在运行时创建可见项目。3. 如果您想完全获取所有子对象,最好保留您的列表所具有的子对象的 ArrayList。您可以根据需要向此 ArrayList 添加或删除子级。

于 2014-07-23T10:21:44.097 回答