【问题标题】:How to get all children (visible and invisible) from a ListView?如何从 ListView 中获取所有子项(可见和不可见)?
【发布时间】:2014-07-23 18:21:44
【问题描述】:

我的问题与ListView getChildAt returning null for visible children 类似,但尽管搜索我还是找不到解决方案。

我有一个带有滚动条的ListViewListView 有 10 个项目,其中 7 个可见,3 个被滚动隐藏。我还有一个外部方法(适配器外),它必须从这个ListView 获取所有孩子(例如使用getChildAt())。

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

getListView().smoothScrollToPosition();

但这不起作用。

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

【问题讨论】:

  • 但这不起作用。 - 它不起作用是正常的,因为ListView 包含仅可见行,它不会为不可见的孩子创建视图。为什么你需要访问ListView 的所有子视图?
  • 每一行包含一个 RadioGroup 和一个必须由用户填写的 Button。所有行都是必需的。
  • 您以错误的方式处理此问题。用户的操作应该反映在适配器的数据中,并且您应该从那里获得RadioGroup 的状态。
  • 没错。我现在就试试。谢谢 Luksprog。
  • 您好,关于获取所有数据没关系(外部方法)。没有可为空的数据。但是 ListView 不会在运行时保留 RadioGroup 的当前值。例如:第 1 行:O O * O 第 2 行:O O * O .... 第 10 行:O O * O 当我滚动滚动时:第 1 行:* O O O(返回原始值)我知道,这是关于 ListView只保留每个位置的可见行,但我找不到任何解决方案。有什么建议么?非常感谢您的耐心和支持。

标签: android android-listview android-view children


【解决方案1】:

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

但 ListView 不会保留 RadioGroup 中的当前值 运行时间。

我发现您对此有一些问题,因此我修改了一些旧代码来构建一个基本示例,您可以使用 find here 的代码。

【讨论】:

【解决方案2】:

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

【讨论】:

  • 嗨 Rohit,实际上它有一个自动滚动,就像你说的那样。我没有实现它。
  • 你能贴出你的适配器的代码吗?据我说,您的适配器类中存在一些问题。
【解决方案3】:

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

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

【讨论】:

  • 我会试试的。让我们来看看。谢谢布迪乌斯。
【解决方案4】:

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

【讨论】:

  • 用户将填充所有行,他将使用滚动来填充最后一行。这就是问题所在。
  • 每当填充一行时,使用适当的侦听器将值记录在适配器的数据元素中。然后,您可以随心所欲地使用这些数据。当getView() 再次以该位置调用时,您可以使用此数据恢复状态。
  • 我之前试过了,但是位置不固定,总是随机的。
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2015-09-11
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多