在我的XML布局中,我定义了3个单选按钮。第一个按钮已设置为checked="true"
<TableRow
android:id="@+id/tableRowX"
android:layout_width="wrap_content" android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radioButton1"
android:layout_gravity="center"
android:onClick="onRadioButtonClick"
android:checked="true"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_gravity="center"
android:onClick="onRadioButtonClick"/>
<RadioButton
android:id="@+id/radioButton3"
android:layout_gravity="center"
android:onClick="onRadioButtonClick" />
</TableRow>
在MainActivity.Java
文件中,我初始化单选按钮。
rb1 = (RadioButton) findViewById(R.id.radioButton1);
rb2 = (RadioButton) findViewById(R.id.radioButton2);
rb3 = (RadioButton) findViewById(R.id.radioButton3);
在同一个文件中,我定义了onRadioButtonClick()
方法
public void onRadioButtonClick(View v)
{
boolean checked = ((RadioButton) v).isChecked();
switch(v.getId()) {
case R.id.radioButton1:
if (checked){
MyButton = "1P";
}
break;
case R.id.radioButton2:
if (checked){
MyButton = "2P";
}
break;
case R.id.radioButton3:
if (checked){
MyButton = "3P";
}
break;
}}
最后点击一个标准按钮(不是单选按钮),我已经定义了onClick()
方法
public void onClick(View v) {
Log.d("LogThis", "My Print >" +MyButton);
}
当我点击激活MyButton
方法的标准按钮时,null
值打印为onClick
。尽管在应用加载时选择了radioButton1
,但仍会发生这种情况。
手动选择任何其他单选按钮后,此行为将消失。然后MyButton
显示正确的值。
有没有其他方法可以解决这个问题?我哪里错了?我假设这是因为我在onRadioButtonClick()
按钮中实现了逻辑。但我不确定采取何种替代方法来解决此问题。
PS:由于按钮需要与RadioGroup
TableLayout.
答案 0 :(得分:2)
另一种方法是在加载视图时同时在代码中设置默认选中的单选按钮,并同时设置MyButton
变量。例如:
rb1 = (RadioButton) findViewById(R.id.radioButton1);
rb2 = (RadioButton) findViewById(R.id.radioButton2);
rb3 = (RadioButton) findViewById(R.id.radioButton3);
rb1.setChecked(true);
MyButton = "1P";
答案 1 :(得分:0)
根据this answer,您需要比较RadioButton对象(通过调用自己的getId()
,而不是将View.getId()
与R.id.radioButtonX
进行比较
e.g。
rb1 = (RadioButton) findViewById(R.id.radioButton1);
switch(v.getId()) {
case (rb1.getId()) //NOT R.id.radioButton1:
if (checked){
MyButton = "1P";
}
break;