【问题标题】:Check radio button id when there're two radio groups当有两个单选组时检查单选按钮 ID
【发布时间】:2014-11-23 08:37:13
【问题描述】:

我是一名 Android 编程初学者,正在尝试创建一个简单的程序,将英寸转换为英尺,将美元转换为日元。我的 main_activity.xml 文件中有以下两个无线电组:

 <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/distanceInput"
        android:layout_below="@+id/distanceInput"
        android:layout_marginTop="10dp" >

        <RadioButton
            android:id="@+id/inch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:checked="true"
            android:onClick="handleClickOne"
            android:text="Inches" />

        <RadioButton
        android:id="@+id/foot"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/currencyInput"
        android:layout_below="@+id/radioGroup1"
        android:onClick="handleClickOne"
        android:text="Feet" />

    </RadioGroup>

    <RadioGroup
        android:id="@+id/radioGroup2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/currencyInput"
        android:layout_below="@+id/currencyInput"
        android:layout_marginTop="10dp" >

        <RadioButton
            android:id="@+id/japan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/radioGroup2"
            android:layout_centerVertical="true"
            android:checked="true"
            android:text="JPY" 
            android:onClick="handleClickTwo"
            />

        <RadioButton
            android:id="@+id/usdollar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/euro"
            android:layout_below="@+id/euro"
            android:text="US Dollars" 
            android:onClick="handleClickTwo"
            />
    </RadioGroup>

以下代码用于我的 handleClickOne() 方法,该方法检查在 Inches 和 Feet 之间选择了哪个单选按钮,但 switch-case 循环总是落在默认情况下 - 我想知道为什么:

public void handleClickOne(View view) {
    DecimalFormat df = new DecimalFormat("#.##");


    boolean checked = ((RadioButton) view).isChecked();

    EditText distance = (EditText) findViewById(R.id.distanceInput);
    double distanceInput = parseStringToDouble(distance.getText().toString());

    switch(view.getId()) { 
    case R.id.foot:
        // convert inches to feet
        if (checked) {
            distance.setText(df.format(inchToFoot(distanceInput)));
        }
        break;

    case R.id.inch:
        //convert feet to inches
        if (checked) {
            distance.setText(df.format(footToInch(distanceInput)));
        }
        break;

    default:  
        distance.setText("000");
        break;
    }
}

我的问题是我是否需要在单选组中选择单选按钮?如果是的话怎么办?

【问题讨论】:

  • 点击是否注册在 RadioGroup (id radioGroup1) 而不是子视图上?
  • 我不确定我是否理解你,但我的单选按钮中有这行:android:onClick="handleClickOne",这是否意味着我在单选按钮上注册了点击处理程序?跨度>
  • 在你的默认情况下添加一个日志语句(或断点)来检查正在传入的视图的 id。这应该有助于找出为什么会命中默认情况,而不是 R。 id.foot 或 R.id.inch 案例。

标签: java android button radio


【解决方案1】:

使用

RadioGroup.setOnCheckedChangeListener 

而不是onclick 来查看设置了哪个单选按钮。我认为 onclick 不能可靠地用于单选按钮

【讨论】:

    【解决方案2】:

    我不确定这是否是最好的方法,但目前以下方法可行:

    因为我知道哪个点击处理程序方法适用于哪个单选组,所以在我的每个点击处理程序方法(在本例中为 handleClickOne())中,我首先获取了 radioGroup 对象:

    RadioGroup radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
    

    然后以这种方式做我的开关盒:

    switch(radioGroup1.getCheckedRadioButtonId()) { 
            case R.id.foot:
            // convert inches to feet
            if (checked) {
                distance.setText(df.format(inchToFoot(distanceInput)));
            }
            break;
    
        case R.id.inch:
            //convert feet to inches
            if (checked) {
                distance.setText(df.format(footToInch(distanceInput)));
            }
            break;
    
        default:
                distance.setText("error");
                break;
    }
    

    它现在有效,但我仍然有兴趣学习最佳实践。谢谢大家!

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多