Android 选中已选中的复选框
我有一个EditText(edModelColor)。当用户单击edModelColor(EditText)时,将调用自定义对话框。自定义对话框由RecylerView和searchview组成,每个项目有一个自定义行。自定义行包含ImageView(图标)、TextView(颜色名称)和复选框供选择。当用户单击任何复选框时,我将colorName及其在适配器中的位置传递到方法checkAndRemove中。此方法将根据其适配器位置添加或删除颜色名称,并将颜色名称添加到edModelColor(EditText)中。工作正常,但问题是,一旦用户再次单击edModelColor(EditText),我想选中CustomDialogbox中已选中的复选框。我在网上看到了一些文章,但我不明白它们的意思 BodyColor对话框:Android 选中已选中的复选框,android,customdialog,Android,Customdialog,我有一个EditText(edModelColor)。当用户单击edModelColor(EditText)时,将调用自定义对话框。自定义对话框由RecylerView和searchview组成,每个项目有一个自定义行。自定义行包含ImageView(图标)、TextView(颜色名称)和复选框供选择。当用户单击任何复选框时,我将colorName及其在适配器中的位置传递到方法checkAndRemove中。此方法将根据其适配器位置添加或删除颜色名称,并将颜色名称添加到edModelColor(
private void bodyColorDialog() {
TextView txtClose;
TextView tvCancel;
Button btnOk;
bodyColorDialog.setContentView(R.layout.ed_body_color_dialog);
bodyColorDialog.setCancelable(false);
txtClose = bodyColorDialog.findViewById(R.id.txtModelClose);
tvCancel = bodyColorDialog.findViewById(R.id.tvCancel);
btnOk = bodyColorDialog.findViewById(R.id.btnOk);
edBodyColorSearchView = bodyColorDialog.findViewById(R.id.edBodyColorSearchViewColor);
edBodyColorRecylerView = bodyColorDialog.findViewById(R.id.edBodyColorRecylerView);
edBodyColorRecylerView.setLayoutManager(new LinearLayoutManager(getContext()));
bodyColorArrayList.clear();
setUpBodyColorArrayList();
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectionCMap = new HashMap<>();
selectionCMap = edBodyColorAdapter.selectionColorsMap;
for(String value : selectionCMap.values()){
/* tv.setText(tv.getText() + "\n" + value);*/
edBodyColor.append(value + ",");
}
bodyColorDialog.dismiss();
}
});
txtClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bodyColorDialog.dismiss();
}
});
tvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bodyColorDialog.dismiss();
}
});
bodyColorDialog.show();
}
private void setUpBodyColorArrayList() {
bodyColorArrayList.clear();
String bodyColorName[] = getResources().getStringArray(R.array.body_color_array);
int bodyColorIcons[] = {R.drawable.red, R.drawable.black, R.drawable.violet, R.drawable.white,
R.drawable.orange, R.drawable.blue, R.drawable.green, R.drawable.yello};
for(int i =0; i < bodyColorIcons.length; i++)
{
bodyColorArrayList.add(new edModelBodyColor(bodyColorName[i], bodyColorIcons[i]));
}
edBodyColorAdapter = new edBodyColorAdapter(getContext(), bodyColorArrayList);
edBodyColorRecylerView.setAdapter(edBodyColorAdapter);
edBodyColorSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String queryString) {
edBodyColorAdapter.getFilter().filter(queryString);
return false;
}
@Override
public boolean onQueryTextChange(String queryString) {
edBodyColorAdapter.getFilter().filter(queryString);
return false;
}
});
}
检查并移动:
private void checkAndRemove(int position, String name) {
if(selectionColorsMap.containsKey(position)){
selectionColorsMap.remove(position);
Toast.makeText(context, "removed", Toast.LENGTH_SHORT).show();
}else {
selectionColorsMap.put(position, name);
Toast.makeText(context, "added", Toast.LENGTH_SHORT).show();
}
}
预览:
结论:当用户再次单击edBodyColor对话框时,我想选中这些复选框值。我可以看到,每次显示对话框时,您都在初始化颜色的数组列表,这就是为什么始终以初始状态启动 相反,您应该在
onCreate()
中初始化ArrayList,并每次重新使用它以保持以前的状态
private void checkAndRemove(int position, String name) {
if(selectionColorsMap.containsKey(position)){
selectionColorsMap.remove(position);
Toast.makeText(context, "removed", Toast.LENGTH_SHORT).show();
}else {
selectionColorsMap.put(position, name);
Toast.makeText(context, "added", Toast.LENGTH_SHORT).show();
}
}