Android 如何在多复选框选择中从ArrayList中删除未选中的元素?
我正在传递一个整数数组列表,该列表保存所选内容并基于所选内容检索该内容,但当我从“检查所选内容”中删除该项目时,它不会从文本中显示的数组列表中删除。这是我处理多重检查的逻辑Android 如何在多复选框选择中从ArrayList中删除未选中的元素?,android,android-dialog,Android,Android Dialog,我正在传递一个整数数组列表,该列表保存所选内容并基于所选内容检索该内容,但当我从“检查所选内容”中删除该项目时,它不会从文本中显示的数组列表中删除。这是我处理多重检查的逻辑 public class MainFragment extends Fragment { private Button buttonUser; String[] listItems; boolean[] checkedItems; ArrayList<Integer> m
public class MainFragment extends Fragment {
private Button buttonUser;
String[] listItems;
boolean[] checkedItems;
ArrayList<Integer> mUserItems = new ArrayList<>();
private Context context;
private AppCompatTextView compatTextView;
public static MainFragment newInstance() {
return new MainFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listItems = getResources().getStringArray(R.array.person_array);
checkedItems = new boolean[listItems.length];
context = getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
buttonUser = (Button) view.findViewById(R.id.buttonUser);
compatTextView = (AppCompatTextView) view.findViewById(R.id.text_view_selection);
buttonUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle("Select Person");
alert.setMultiChoiceItems(listItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
if (!mUserItems.contains(which)) {
mUserItems.add(which);
}
} else if (!mUserItems.contains(which)){
mUserItems.remove(which);
}
}
});
alert.setCancelable(false);
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String items = "";
for (int i = 0; i < mUserItems.size(); i++) {
items = items.concat(listItems[mUserItems.get(i)]);
if (i != mUserItems.size() - 1) {
items = items + ", ";
}
compatTextView.setText(items);
}
}
});
alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = alert.create();
dialog.show();
}
});
return view;
}
}
这在某种程度上是正确的,但当我从警报对话框中取消选择选项时,列表不会更新并显示以前的检查数据。我认为如果isChecked为false,else if部分将产生false。可能应该是这样的吗?:
else if(mUserItems.contains(which))
是这样的,但当我最后从列表中选择任意随机项时,它会崩溃,出现数组越界异常。如果(!mUserItems.contains(which))的话,这就是我使用else的原因
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
if (!mUserItems.contains(which)) {
mUserItems.add(which);
}
} else if (!mUserItems.contains(which)){
mUserItems.remove(which);
}
}