До сих пор у меня есть следующий код, который позволяет мне установить значение для текстового представления, когда я нажимаю между кнопками переключения, сгруппированными в радиогруппу. По какой-то причине кажется, что 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;
глобальная переменная.
Я использовал отладчик, и число не равно нулю, а значение равно номеру кнопки.
OnCheckedChangedListener
в группе переключателей только после того, как переключатель был нажат. Это, наверное, слишком поздно. Я не уверен в порядке, в котором обрабатываются различные события, но мне кажется, что после того, как вы обработали клик, проверенное измененное событие уже может быть потеряно. - person Dawood ibn Kareem   schedule 04.11.2014radioGroup.setOnCheckedChangeListener( ... )
материал отдельно, вне кодаOnClickListener
. - person Dawood ibn Kareem   schedule 04.11.2014setText
дляTextView
, и оно не изменяется на значение, которое вы передаете. Просто в качестве эксперимента — что произойдет, если вы измените значение, которое вы передали, на жестко закодированную константу? (Кстати, +1 за использование отладчика) - person Dawood ibn Kareem   schedule 04.11.2014num
ссылается наTextView
, как вы думаете? Это то, что вы можете проверить с помощью отладчика? - person Dawood ibn Kareem   schedule 05.11.2014