我正在创建一个使用两个或多个复选框组的Android应用程序。
我动态创建复选框和OnCheckedChangeListener,我需要将复选框分组,以限制应选择的复选框数量。
我有我的上课产品,每个产品都有附加功能,有些产品有1个或多个附加功能。我可以从其中每一种中选择一种或多种成分。
问题在于侦听器可用于任何复选框,我无法为每组复选框分配一个侦听器。
如何为每组复选框实现多个侦听器?
我已经尝试过创建一个新的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);
}