Android UI将RadioButton显示为已选中,但事实并非如此

时间:2011-11-27 21:06:09

标签: android radio-button

在更改方向时重新创建我的用户界面时,我使用super.onCreate(savedInstanceState)getLastNonConfigurationInstance()来访问我存储的自定义数据,以填充布局的动态部分。

我有一个RadioGroup,它有两个RadioButtons,已在XML文件中定义。 XML会自动选择第一个。

当方向发生变化并选择了SECOND RadioButton时,一切似乎都能正常工作;仍然在UI中选择了第二个RadioButton。

RadioGroup.getCheckedRadioButtonId()表示已选择第一个RadioButton。我实际上想要第一个被选中。但是当我调用rb1.setChecked(true)时没有任何变化 - 第二个仍然显示为已选中,并且RadioGroup仍然告诉我第一个被选中(现在它会有意义,但它没有显示)。

这真是一种奇怪的行为,有人有提示吗?

(编辑) 部分代码:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.itemselected);
    (...)
    radioGroupServingType = (RadioGroup) findViewById(R.id.radioGroupServingType);
    (...)

    RadioButton radioOwnServing = (RadioButton) findViewById(R.id.radioOwnServing);
    RadioButton radioUseServing = (RadioButton) findViewById(R.id.radioUseServing);

    radioOwnServing.setOnClickListener(this);
    radioUseServing.setOnClickListener(this);

    //FIXME WTF
    Log.d("", radioOwnServing.isChecked()+"/"+radioUseServing.isChecked()+" own/use checked");
    radioOwnServing.setChecked(true);
    Log.d("", radioOwnServing.isChecked()+"/"+radioUseServing.isChecked()+" own/use checked");

如果我在UI中选择radioUseServing并更改方向,则日志会同时显示true/false own/use checked - 尽管在UI中显示radioUseServing已选中。

顺便说一句,logcat也输出

W/asset(4040): deep redirect failure from 0x0103003e => 0x02060007, defStyleAttr=0x0101007e, defStyleRes=0x0103001a, style=0x00000000

更改方向时,有时会多次。我还没有找到谷歌的任何意思。

1 个答案:

答案 0 :(得分:2)

我已经在IRC上与你交谈了,但我相信如果你得到了视图,并发布了一个可以调用.setChecked()的runnable,这实际上会导致setChecked调用在适当的时候发生,从而避免在视图层次结构准备好之前调用setChecked。 像这样:

final View myRadioButton  = findViewById(R.id.myradiobutton); 
myRadioButton.post(
    new Runnable() {
        @Override
        public void run() { myRadioButton.setChecked(true); }
    }
);