Android 选中已选中的复选框

Android 选中已选中的复选框,android,customdialog,Android,Customdialog,我有一个EditText(edModelColor)。当用户单击edModelColor(EditText)时,将调用自定义对话框。自定义对话框由RecylerView和searchview组成,每个项目有一个自定义行。自定义行包含ImageView(图标)、TextView(颜色名称)和复选框供选择。当用户单击任何复选框时,我将colorName及其在适配器中的位置传递到方法checkAndRemove中。此方法将根据其适配器位置添加或删除颜色名称,并将颜色名称添加到edModelColor(

我有一个EditText(edModelColor)。当用户单击edModelColor(EditText)时,将调用自定义对话框。自定义对话框由RecylerView和searchview组成,每个项目有一个自定义行。自定义行包含ImageView(图标)、TextView(颜色名称)和复选框供选择。当用户单击任何复选框时,我将colorName及其在适配器中的位置传递到方法checkAndRemove中。此方法将根据其适配器位置添加或删除颜色名称,并将颜色名称添加到edModelColor(EditText)中。工作正常,但问题是,一旦用户再次单击edModelColor(EditText),我想选中CustomDialogbox中已选中的复选框。我在网上看到了一些文章,但我不明白它们的意思

BodyColor对话框:

    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();
    }
}