2014-12-08 2 views
0

У меня есть деятельность, которая реализует как Checkbox.OnCheckedChangeListener, так и RadioGroup.OnCheckedChangeListener Группы динамически сгенерированы и переданы одинаковыми Activity как listener.Android RadioGroup OnCheckedChangeListener

Однако, когда я нажимаю на RadioGroup, RadioGroup.OnCheckChangeListener полностью игнорируется, но вот где он становится странным. Он вызывает CheckBox.OnCheckChangeListener! Я попробовал передать эту активность слушателю RadioGroup перед его передачей, но RadioGroup не может даже принять его, только прослушиватель CheckBox проходит.

@Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_MULTI_ANSWER")) { 
       String selected = buttonView.getText().toString(); 
       if (subquestion.getAnswer().getDataList() != null) { 
        Answer answer = subquestion.getAnswer(); 
        ArrayList<String> checked = answer.getDataList(); 
        if (checked.contains(selected)) { 
         checked.remove(selected); 
         Log.d("Checkbox" + buttonView.getId(), "unchecked"); 
        } else { 
         checked.add(selected); 
         Log.d("Checkbox" + buttonView.getId(), "checked"); 
        } 
       } else { 
        ArrayList<String> checked = new ArrayList<String>(); 
        checked.add(selected); 
        subquestion.getAnswer().setDataList(checked); 
        Log.d("Checkbox" + buttonView.getId(), "checked"); 
       } 
      } 
      if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_SINGLE_ANSWER")) { 
       RadioGroup group = buttonView; //CAN'T BE DONE 
       String selected = group.getFocusedChild().getId() + ""; 
       subquestion.getAnswer().setData(selected); 
       Log.d("Radiobutton " + selected + group.getFocusedChild().getId(), "selected"); 
      } 
     } 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      //This does NOTHING, can't even be passed to the RadioGroup as a listener 
     } 

Как получить RadioGroup с кнопки ViewView? Я генерирую все в коде, и каждый раз он различен, поэтому нет статических идентификаторов, чтобы определить, что нажали. Я передаю идентификатор радиолюбителям, чтобы сообщить мне, что это такое, но я не могу добраться до него так.

Он отлично работает для флажков, это просто, что Android, похоже, выбрасывает неправильное событие и использует неправильный обработчик событий для RadioGroup.

Благодарим за понимание!

+0

ты попытался установить андроид: фокусируемый = "ложь" \t \t андроида: focusableInTouchMode = "ложь" в RadioGroup? – Umair

ответ

2

Вызов этот метод для RadioGroup.OnCheckChangeListener и передать RadioGroup в качестве аргумента

public void onRadioChangeListener(RadioGroup radioGroup){ 

    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      // write your code here 
     } 
    }); 
} 
+0

[Создание утечек] (http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html). Вы не должны делать это нигде, поскольку это вызывает серьезные утечки. На данный момент я передаю, является ли это флажком или радиогруппой за пределами всего, указав тип группы в отдельном классе, который содержит данные для создания групп и передает их активности, чтобы узнать, что к чему. Довольно уродливый хак, но достаточно функциональный. –

+0

Как вы сказали, что ваш onCheckedChangeListener не работает для RadioGroup –

+0

Он передает событие неправильному onCheckedChangeListener. Сам слушатель отлично работает. –

Смежные вопросы