如何对两个或更多组的Android复选框使用多个OnCheckedChangeListener

时间:2019-04-30 04:19:11

标签: android checkbox

我正在创建一个使用两个或多个复选框组的Android应用程序。

我动态创建复选框和OnCheckedChangeListener,我需要将复选框分组,以限制应选择的复选框数量。

我有我的上课产品,每个产品都有附加功能,有些产品有1个或多个附加功能。我可以从其中每一种中选择一种或多种成分。

问题在于侦听器可用于任何复选框,我无法为每组复选框分配一个侦听器。

Producto

Checkboxes accumulate

如何为每组复选框实现多个侦听器?

我已经尝试过创建一个新的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);
}

0 个答案:

没有答案