检查单选按钮未返回正确的值。

时间:2014-06-26 23:25:44

标签: android android-layout

在我的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.

2 个答案:

答案 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;