Почему onCheckedChanged не отвечает?

До сих пор у меня есть следующий код, который позволяет мне установить значение для текстового представления, когда я нажимаю между кнопками переключения, сгруппированными в радиогруппу. По какой-то причине кажется, что OnCheckedChanged не вызывается. Это подход для этого?

//onClickListener method that returns an interface
private View.OnClickListener createClickListener(final int value) {
    return new View.OnClickListener()  {

        @Override
        public void onClick(View view) {

            buttonValue = value;
            buttonState = true;

            ToggleButton clickedButton = (ToggleButton) view;
            RadioGroup radioGroup= (RadioGroup) clickedButton.getParent();
            final TextView num = (TextView) view.findViewById(R.id.num);

            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                        switch(checkedId){
                            case R.id.number_zero:
                                buttonValue = value;
                                num.setText(buttonValue);
                                System.out.println("Button Value" + buttonValue);
                            case R.id.number_one:
                                buttonValue = value;
                                num.setText(buttonValue);
                                System.out.println("Button Value" + buttonValue);
                            case R.id.number_two:
                                buttonValue = value;
                                num.setText(buttonValue);
                                System.out.println("Button Value" + buttonValue);
                            case R.id.number_three:
                                buttonValue = value;
                                num.setText(buttonValue);
                                System.out.println("Button Value" + buttonValue);
                    }
                    System.out.println("Check changed listener called");
                }
            });

            for (int i = 0; i < radioGroup.getChildCount(); ++i) {
                View nextChild = radioGroup.getChildAt(i);
                if (!(nextChild instanceof ToggleButton)) {
                    continue;
                }
                if (nextChild.getId() != clickedButton.getId() || !clickedButton.isChecked()) {
                    ToggleButton tb2 = (ToggleButton) nextChild;
                    tb2.setChecked(false);
                }
            }

        }

    };
}

Вызов с использованием:

zero.setOnClickListener(createClickListener(0));
one.setOnClickListener(createClickListener(1));
two.setOnClickListener(createClickListener(2));
three.setOnClickListener(createClickListener(3))

ИЗМЕНИТЬ:

По какой-то причине текст не устанавливается в TextView num.

Я изменил выше с

final TextView num = (TextView) view.findViewById(R.id.num);
num.setText(value);

to

num = (TextView) findViewById(R.id.num);
num.setText(Integer.toString(value));

делая это:

  TextView num; 

глобальная переменная.

Я использовал отладчик, и число не равно нулю, а значение равно номеру кнопки.


person Kala J    schedule 04.11.2014    source источник
comment
На мой взгляд, это довольно запутанный подход. Вы устанавливаете OnCheckedChangedListener в группе переключателей только после того, как переключатель был нажат. Это, наверное, слишком поздно. Я не уверен в порядке, в котором обрабатываются различные события, но мне кажется, что после того, как вы обработали клик, проверенное измененное событие уже может быть потеряно.   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
о, я вижу, что бы вы предложили было бы лучше?   -  person Kala J    schedule 04.11.2014
comment
Я бы назвал radioGroup.setOnCheckedChangeListener( ... ) материал отдельно, вне кода OnClickListener.   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
что, если бы я хотел, чтобы оба действия происходили по клику?   -  person Kala J    schedule 04.11.2014
comment
Если вы хотите, чтобы оба действия происходили при клике, вам вообще не нужен прослушиватель onCheckedChanged. Но вы можете поместить код, обрабатывающий изменение, в прослушиватель любого типа. Вы можете протестировать оба способа и посмотреть, какой из них лучше работает для вашего приложения, но я был бы удивлен, если бы вы увидели слишком большую разницу.   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
Спасибо, я проверил, но теперь я получаю NPE, хотя значение - это число.   -  person Kala J    schedule 04.11.2014
comment
Хорошо, на какой линии находится NPE?   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
Смотрите редактировать спасибо~! @ДэвидУоллес   -  person Kala J    schedule 04.11.2014
comment
Итак, я в замешательстве. Вы все еще получаете NPE? Если да, то я до сих пор не знаю, на какой линии он находится.   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
нет, извините. Я починил это. NPE больше нет :( Теперь он просто ведет себя странно... в том смысле, что я не уверен, почему, когда я устанавливаю текст для номера, текст не меняется.   -  person Kala J    schedule 04.11.2014
comment
Итак, если я вас правильно понял, вы в основном вызываете setText для TextView, и оно не изменяется на значение, которое вы передаете. Просто в качестве эксперимента — что произойдет, если вы измените значение, которое вы передали, на жестко закодированную константу? (Кстати, +1 за использование отладчика)   -  person Dawood ibn Kareem    schedule 04.11.2014
comment
Все еще не устанавливается. Странно :О   -  person Kala J    schedule 05.11.2014
comment
Давайте продолжим обсуждение в чате.   -  person Kala J    schedule 05.11.2014
comment
Я немного хватаюсь за соломинку, но вы уверены, что num ссылается на TextView, как вы думаете? Это то, что вы можете проверить с помощью отладчика?   -  person Dawood ibn Kareem    schedule 05.11.2014
comment
Я только что заметил, эта странная ошибка возникает только при первом просмотре. В других моих представлениях это работает нормально. Это интересно.   -  person Kala J    schedule 05.11.2014
comment
Да, этого я и ожидал. Я надеюсь, что мой первый комментарий выше объясняет, почему это происходит.   -  person Dawood ibn Kareem    schedule 05.11.2014
comment
Может быть. Я также думаю, что это может быть связано с этим: stackoverflow.com/questions/11794269/   -  person Kala J    schedule 05.11.2014
comment
Возможно нет. Это похоже на совершенно другой набор событий.   -  person Dawood ibn Kareem    schedule 05.11.2014
comment
Зачем? Похоже, это может быть потому, что это происходит только при первом просмотре в моем пейджере. Другие представления работают отлично, и идентификатор определенно правильный.   -  person Kala J    schedule 05.11.2014
comment
@DavidWallace, вот видео о том, что происходит. dropbox.com/s/cfx2r3t3umhgc4p/VIDEO0048.mp4?dl=0< /а>   -  person Kala J    schedule 05.11.2014