Проверенные флажки, которые уже отмечены - PullRequest
0 голосов
/ 21 октября 2019

У меня есть один EditText (edModelColor). когда пользователь нажимает на edModelColor (EditText), то вызывается пользовательское диалоговое окно. Пользовательское диалоговое окно состоит из RecylerView и searchview и одной пользовательской строки для каждого элемента. Пользовательская строка содержит ImageView (значок), TextView (colorNames) и флажок для выбора. Когда пользователь нажимает на любой флажок, я передал colorName и его положение в адаптере в метод checkAndRemove. этот метод добавит или удалит имя цвета в соответствии с его положением адаптера, а colorNames будет добавлено в edModelColor (EditText). он работает нормально, но проблема в том, что как только пользователь снова щелкает по edModelColor (EditText), я хочу установить флажки, которые уже проверены внутри CustomDialogbox. Я видел некоторые статьи в Интернете, но не мог понять, что они имели в виду.

bodyColorDialog:

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

}

edBodyColorAdapter.java

        holder.checkBoxColor.setOnCheckedChangeListener(new 
        CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

                int position = holder.getAdapterPosition();
                clickedColorNamePosition = edBodyColorArrayList.indexOf(filteredArrayList.get(position));
                String name = edBodyColorArrayList.get(clickedColorNamePosition).getBodyColorName();

                Toast.makeText(context, "name = " + name, Toast.LENGTH_SHORT).show();

            //this mthod will check if selected checkbox value is already present or not.
            // It present then remove ( means user unchecked box) and if value is not there means user has selected checkbox
                checkAndRemove(position,name);

        }

    });

checkAndRemove:

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

предварительный просмотр: enter image description here

Заключение: я хочу проверить значения этих флажков, когда пользователь снова щелкнет в диалоговом окне edBodyColor ..

1 Ответ

0 голосов
/ 21 октября 2019

Как я вижу, вы инициализируете ArrayList цветов каждый раз, когда вы показываете диалог, поэтому вы всегда начинаете с исходного состояния.

Вместо этого вы должны инициализировать ArrayList внутри onCreate() и использовать его каждый раз, чтобы поддерживать предыдущее состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...