【问题标题】:Checkbox issue in custom listview自定义列表视图中的复选框问题
【发布时间】:2012-12-15 12:45:50
【问题描述】:

我想在单击按钮时从 Custom ListView 中选择所有 CheckBox

但是当我在 ListView 中有超过 9 个项目时,我会在下面的第二行代码中收到 NullPointerException。

View vi= diffeneceLv.getChildAt(i);
CheckBox cb = (CheckBox) vi.findViewById(R.id.conschkbx);

【问题讨论】:

  • 你能发一个SSCCE吗?这应该让我们更容易为您提供帮助。

标签: android android-layout checkbox


【解决方案1】:

你错了,ListView 重复使用你的行,这意味着内存中创建的行/布局的数量不等于你在数组中的项目。

通常ListView 在滚动时将新数据重新设置为上一行。

我建议你学习this blog post,这里作者保持Checked状态,然后在适配器的getView()中进行相应的设置。

作者创建了一个这样的布尔数组:

private boolean[] thumbnailsselection;

并存储检查或取消检查的状态,然后从getView() 访问它,你要做的是,你将为所有索引存储true 并刷新你的适配器。它会选择你所有的行。

这里是another post

【讨论】:

    【解决方案2】:

    您不应该为此目的保留单个视图的引用,因为它们会被回收。

    为了您的方便,ListView 持有一个BooleanSparseArray 来存储检查的项目。此数组包含项目 ID(适配器中项目的索引/位置)到布尔值的映射。

    由于ListView 为您完成了所有这些工作,因此避免重新发明轮子 并使用ListView 的能力来保持其项目的检查状态是很好的。您所要做的就是为ListView设置一个选择模式:setChoiceMode(int choiceMode)

    【讨论】:

    • 实际上我想在自定义列表视图的布局中添加 SelectAll 按钮。单击 SelectAll 按钮后,列表视图中的所有复选框都将被选中。但是如果我在 listview 中的行数少于 9 行,则它可以正常工作,否则会为复选框提供空指针异常。
    猜你喜欢
    • 2023-03-13
    • 2011-07-23
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多