Как получить значения флажка из динамически созданного флажка

Вот код для моего флажка.

if (type.equalsIgnoreCase("checkbox")){

                String checkBoxText = dataObj.getString("checkboxname");
                checkBox = dynamicviews.CreateCheckbox(context,value,checkBoxText);

                id = R.id.gl + i + 9;
                if (j == 2) {
                    j = 0;
                    tableRow = new TableRow(context);
                    tableRow.setPadding(0, 10, 0, 10);
                    tableLayout.addView(tableRow);
                }

                j++;
                tableRow.addView(checkBox);
                checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                        String string = checkBox.getText().toString();
                        Log.i("checkbox",string);
                    }
                });
            }

и ниже код для создания флажка

public CheckBox CreateCheckbox(Context context,String checkName,String checkBoxText){
    checkBox = new CheckBox(context);
    checkBox.setGravity(Gravity.CENTER);
    checkBox.setTextAlignment(Gravity.CENTER);
    checkBox.setText(checkBoxText);
    checkBox.setTextColor(Color.WHITE);
    checkBox.setBackgroundResource(R.drawable.custom_rdbtn);
    checkBox.setButtonDrawable(new StateListDrawable());
    checkBox.setCompoundDrawablePadding(10);
    return checkBox;
}

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


person venkatesh gowda    schedule 16.06.2016    source источник
comment
Вы можете попробовать сохранить экземпляры флажков в файле ArrayList<CheckBox>.   -  person Sourav Kanta    schedule 16.06.2016


Ответы (2)


 checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                        String string = buttonView.getText().toString();
                        Log.i("checkbox",string);


                    }
                });

я получил решение

person venkatesh gowda    schedule 17.06.2016

Вы добавляете checkBoxobject к tableRow ДО установки его setOnCheckedChangeListener, поэтому он будет работать только для последнего созданного вами checkBox.

Чтобы решить эту проблему, вам просто нужно сначала установить setOnCheckedChangeListener, а затем вызвать tableRow.addView(checkBox) — см. код ниже:

//first, set the setOnCheckedChangeListener on this checkBox,
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)     
    {   String string = buttonView.getText().toString();
       Log.i("checkbox",string);
    }
});
//only now do you add the view
tableRow.addView(checkBox);

Попробуйте, надеюсь поможет.

person ishmaelMakitla    schedule 16.06.2016
comment
Принято к сведению. Вместо checkBox.getText() должно быть buttonView.getText() — метод onCheckedChanged передает checkBox представление (CompoundButton), чье проверенное состояние изменилось. Я обновил код соответственно, и он должен работать. Самой большой проблемой было добавление checkBoxobject перед установкой слушателя. - person ishmaelMakitla; 17.06.2016