在更改方向时重新创建我的用户界面时,我使用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
更改方向时,有时会多次。我还没有找到谷歌的任何意思。
答案 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); }
}
);