Java ListView中具有奇数检查行为的复选框

Java ListView中具有奇数检查行为的复选框,java,android,android-listview,android-checkbox,Java,Android,Android Listview,Android Checkbox,我不熟悉Java和Andriod开发 我的应用程序中有一个包含ListView的视图 然后我有一个从ArrayAdapter继承的自定义适配器 在getView方法的视图中,我返回一行,其中包含一些文本和一个复选框 到目前为止,这一切都很好。我的列表已填充,我可以检查我的项目,所有事件似乎都按预期进行 我的问题是,我检查了前3个项目,然后我注意到第11、12和13个项目被选中,当我滚动时,我看到其他复选框也以相同的模式定期被选中 如果我选中大约10个复选框,那么它将最终选中大约80个列表中的所有

我不熟悉Java和Andriod开发

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

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

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

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

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

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

谁能解释一下我做错了什么

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


提前感谢

之所以会发生这种情况,是因为Android会出于性能目的回收列表项,下面是此问题的解决方案:


希望能提供帮助:)

之所以会发生这种情况,是因为Android会出于性能目的回收列表项,下面是此问题的解决方案:


希望能有所帮助:)

这是预期的行为。ListView重用适配器中的视图。 因此,您需要保留一组“选定项目”,并在单击
复选框时添加或删除项目,然后在getView中添加以下代码:

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

这样,当重新使用行时,
复选框将处于正确的状态。

这是预期的行为。ListView重用适配器中的视图。 因此,您需要保留一组“选定项目”,并在单击
复选框时添加或删除项目,然后在getView中添加以下代码:

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

这样,当重新使用该行时,
复选框将处于正确状态。

如果有任何不清楚的地方,请询问,我将尽我所能作出回应:如果您将getView方法的代码放在DIf中,我可以准确地告诉您问题发生的位置;)任何不清楚的问题,请询问,我将尽我所能作出回应:DIf如果您将getView方法的代码放入,我可以告诉您问题发生的确切位置;)非常感谢将签出,然后根据需要标记:)非常感谢将签出,然后根据需要标记:)