Android 滚动时,对话框中的复选框变为未选中状态
我正在使用Android 滚动时,对话框中的复选框变为未选中状态,android,checkbox,android-alertdialog,multichoiceitems,Android,Checkbox,Android Alertdialog,Multichoiceitems,我正在使用AlertDialog.Builder.setMultiChoiceItems显示带有文本的复选框。我可以成功地显示选中的项目,但每当我向下或向上滚动它时,其中一些项目就会被随机取消选中。下面是我的代码 我能做些什么来解决这个问题?感谢您的帮助 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Title") .setMultiChoiceItems(it
AlertDialog.Builder.setMultiChoiceItems
显示带有文本的复选框。我可以成功地显示选中的项目,但每当我向下或向上滚动它时,其中一些项目就会被随机取消选中。下面是我的代码
我能做些什么来解决这个问题?感谢您的帮助
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title")
.setMultiChoiceItems(items, selectedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
selected[which] = isChecked;
}
})
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
})
.setNegativeButton(R.string.preklici, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
您需要在代码中处理复选框的检查状态。创建已选定项目的列表 因此创建
ArrayList selList=new ArrayList()编码>然后在设置多选项项上执行以下操作-
.setMultiChoiceItems(items, selectedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
// If user select a item then add it in selected items
selectedItems.add(which);
multichoiceDialog.getListView().setItemChecked(which, isChecked);// You can tell the dialog to update its state here.
}
}
请注意,我只显示了代码的一部分,因此只能使用setMultiChoiceItems
方法中的内容。否则,您可能需要自己处理大括号:)我认为您正在列表视图项中实现复选框,以便您可以查看此答案。
希望能有所帮助也许你能看看这个@Rucha Bhatt那么我想我需要用listview创建一个新的自定义对话框?这是AppCompat库中的一个bug。有些版本有缺陷,有些没有。例如,23.2.1只在Android 6上有缺陷,但23.0.1没有。你可以在这里看到可用库版本的列表:@soran_glekovec你有没有得到你问题的答案?我遇到了同样的问题,正在寻找解决方案。@布赖恩:不,我已决定对我的项目使用不同的方法。谢谢,但我可以获取复选框的状态来显示它们,问题只在我滚动时出现,一些复选框被取消选中。好的,那么您的selectedItems列表是什么?你是否在你的OnCliland what is selected list中更新它。@soran_glekovec我想你在交换两件事。更新selectedItems列表并将其传递给setMultiChoiceItems方法,或者传递selected列表问题不在于onClick侦听器,而是在滚动时保留对话框创建时已选中的复选框状态。是的,我知道。你能试试上面的代码吗。调用set方法时,第二个参数是应该检查的项目列表。当你滚动时,它会再次被调用。因此,这就是为什么您在单击时更新相同的参数,即selectedItemsSo,那么我想我需要使用listview创建一个新的自定义对话框?@soran_glekovec是的,您应该使用list View创建一个对话框,这将是一个很好的方法