【问题标题】:Checkbox in ListView with odd checking behaviourListView 中的复选框具有奇怪的检查行为
【发布时间】:2023-03-20 16:37:01
【问题描述】:

我是 Java 和 Andriod 开发的新手。

我的应用中有一个包含 ListView 的视图

然后我有一个继承自 ArrayAdapter 的自定义适配器

在 getView 方法的视图中,我返回一行,其中包含一些文本和一个复选框

到目前为止,这一切都很好,我的列表已填充,我可以检查我的项目,所有事件似乎都按预期触发。

我遇到的问题是我检查了前 3 个项目,然后我注意到第 11、12 和 13 个项目被选中,当我滚动时,我看到其他复选框似乎也定期在相同的模式。

如果我检查大约 10 个复选框,那么它最终会检查大约 80 个列表中的所有项目...

谁能解释我做错了什么?

我认为没有任何代码可以帮助解释这一点,因为我没有在任何地方设置复选框的检查状态,这都是自己处理的,所以检查项目的事实让我感到困惑。

提前致谢

【问题讨论】:

  • 有什么不清楚的请追问,我会尽我所能回复:D
  • 如果您将 getView 方法的代码放入,我可以准确地告诉您问题发生在哪里;)

标签: java android android-listview android-checkbox


【解决方案1】:

发生这种情况是因为 Android 出于性能目的回收列表项,这里您有此问题的解决方案: ListView reusing views when ... I don't want it to

希望能帮到你:)

【讨论】:

  • 非常感谢会检查出来,然后酌情标记:)
【解决方案2】:

这是预期的行为。 ListView 重用适配器中的视图。 所以你想要的是保留“选定项目”的Set 并在点击CheckBox 时添加或删除它,然后在你的getView中添加以下代码:

if(mSelected.contains(getItem(position)) {
    checkBox.setChecked(true);
} else {
    checkBox.setChecked(false);
}

这样,当行被重用时,CheckBox 将是正确的状态。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多