Как использовать несколько OnCheckedChangeListener для двух или более групп Android-флажков - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю приложение Android, в котором я использую две или более группы флажков.

Я динамически создаю флажок и OnCheckedChangeListener, мне нужно сгруппировать флажки по группам, чтобы ограничить количество флажков, которые должны быть выбраны.

У меня есть продукты моего класса, и у каждого продукта есть дополнительные, для некоторых продуктов есть 1 или более дополнительных.Из которых каждый дополнительный я могу выбрать 1 или более ингредиентов.

Проблема в том, что Слушатель работает для любого флажка, я не могу назначить слушателя для каждой группы флажков.

Producto

Флажки накапливаются

Как я могу реализовать несколько слушателей для каждой группы флажков?

Я уже пытался вставить вдля создания нового OnCheckedChangeListener, но все работает как одна группа флажков, а не как новая.

         for(int j = 0; j < extras.size(); j++){

            extra = extras.get(j);
            //Si los extras son checkboxs
            final LinearLayout layoutCheckBoxs = new LinearLayout(this);
            ViewGroup.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            ((LinearLayout.LayoutParams) lp).setMargins(16,16,16,16);
            layoutCheckBoxs.setOrientation(LinearLayout.VERTICAL);
            layoutCheckBoxs.setId(j+1);
            layoutCheckBoxs.setTag(j);
            final CheckBox[] checkBoxes = new CheckBox[extra.getListIngredients().size()];

            CheckBox.OnCheckedChangeListener checker = new CheckBox.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton cb, boolean b) {
                    if (count == extra.getMaxSelect() && b) {
                        cb.setChecked(false);
                        Toast.makeText(getApplicationContext(),
                                String.format("Solo puedes seleccionar %s %s",extra.getMaxSelect(),extra.getMaxSelect()==1?"extra":"extras"), Toast.LENGTH_SHORT).show();
                    } else if (b) {
                        count++;
                        Log.e("Count",String.valueOf(count));
                        extrasCompleted[Integer.valueOf(layoutCheckBoxs.getTag().toString())] = count;

                        enabledButtonAddCart(extras);
                    } else if (!b) {
                        count--;
                        Log.e("Count",String.valueOf(count));
                        extrasCompleted[Integer.valueOf(layoutCheckBoxs.getTag().toString())] = count;
                        enabledButtonAddCart(extras);
                    }
                }
            };

            for(i = 0; i < extra.getListIngredients().size(); i++){
                checkBoxes[i] = new CheckBox(this);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    checkBoxes[i].setTextAppearance(R.style.customCheckBoxStyle);
                }else{
                    checkBoxes[i].setTextAppearance(this,R.style.customCheckBoxStyle);
                }
             /*   checkBoxes[i].setTypeface(type);*/
                String rightText = "+ "+fmt.format(extra.getListIngredients().get(i).getPrice());
                String leftText =  extra.getListIngredients().get(i).getName();
                CharSequence text = null;
                if(extra.getListIngredients().get(i).getPrice()!=0) {
                    text = new Truss()
                            .append(leftText)
                            .pushSpan(new LineOverlapSpan())
                            .append("\n")
                            .popSpan()
                            .pushSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE))
                            .pushSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorPriceExtras)))
                            .append(rightText)
                            .build();
                }else{
                    text = new Truss()
                            .append(leftText)
                            .pushSpan(new LineOverlapSpan())
                            .append("\n")
                            .popSpan()
                            .build();
                }
                checkBoxes[i].setText(text);
                checkBoxes[i].setId(i);
                checkBoxes[i].setPadding(16,16,16,16);
                //setMargins(checkBoxes[i],15,5,15,5);
                setMargins(checkBoxes[i],15,15,15,15);


                checkBoxes[i].setOnCheckedChangeListener(checker);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...