Android用户界面显示选中的RadioButton,尽管它不是
在方向更改时重新创建UI时,我使用Android用户界面显示选中的RadioButton,尽管它不是,android,radio-button,Android,Radio Button,在方向更改时重新创建UI时,我使用super.onCreate(savedInstanceState)和GetLastNonfigurationInstance()访问存储的自定义数据,以填充布局的动态部分 我有一个RadioGroup,它有两个单选按钮,并且已经在XML文件中定义。XML会自动选择第一个 当方向发生变化并且选择了第二个单选按钮时,一切似乎都正常工作;第二个单选按钮仍在UI中选择 但是RadioGroup.getCheckedRadioButtonId()表示第一个单选按钮被选中
super.onCreate(savedInstanceState)
和GetLastNonfigurationInstance()
访问存储的自定义数据,以填充布局的动态部分
我有一个RadioGroup,它有两个单选按钮,并且已经在XML文件中定义。XML会自动选择第一个
当方向发生变化并且选择了第二个单选按钮时,一切似乎都正常工作;第二个单选按钮仍在UI中选择
但是RadioGroup.getCheckedRadioButtonId()
表示第一个单选按钮被选中。我希望第一个被选中。但是当我调用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
,尽管radioUseServing在UI中显示为选中
顺便说一句,logcat还输出
W/asset(4040): deep redirect failure from 0x0103003e => 0x02060007, defStyleAttr=0x0101007e, defStyleRes=0x0103001a, style=0x00000000
改变方向时,有时会多次。我还没有找到谷歌关于这意味着什么的任何信息。我已经在IRC上与您进行了交谈,但我相信如果您获得视图,并向其发布一个runnable,它将调用.setChecked(),这实际上会导致setChecked调用在适当的时间发生,从而避免在视图层次结构准备就绪之前调用setChecked。 大概是这样的:
final View myRadioButton = findViewById(R.id.myradiobutton);
myRadioButton.post(
new Runnable() {
@Override
public void run() { myRadioButton.setChecked(true); }
}
);
我只是解决了这个问题,从RadioGroup中删除了两个单选按钮,创建了两个新的RB并添加了它们,这样xml中的RB就只是占位符了。这是可行的,但有点脏,不能解决根本问题。。。