两个单选按钮都处于活动状态

时间:2016-05-22 15:16:50

标签: java android

我对Android很新,我正在尝试实现一个基本的应用程序转换为Celsius或Fahrenheit。

这是基本代码

public class MainActivity extends AppCompatActivity {

EditText temp ;
RadioButton celsius;
RadioButton fahrenheit;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    temp = (EditText) findViewById(R.id.question_text);
    final RadioGroup options = (RadioGroup) findViewById(R.id.options);
    celsius = (RadioButton) findViewById(R.id.celsius);
    fahrenheit = (RadioButton) findViewById(R.id.fahrenheit);
    button = (Button) findViewById(R.id.convert);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view){
            int button1 = 1;
            int button2 = 2;
            celsius.setId(button1);
            fahrenheit.setId(button2);
            int number = Integer.parseInt(temp.getText().toString());
            TextView text = (TextView) findViewById(R.id.answer_text);
            double answer;
            int id = options.getCheckedRadioButtonId();
            if(id == -1){
                text.setText("Please select an option");
            }
            else if(id == 2){
                answer = number*1.8 + 32;     //Convert to Fahrenheit
                text.setText("" + answer);
            }
            else{
                answer = (number-32)/1.8;
                text.setText("" + answer);    //Convert to Celsius
            }
        }
    });
}

}

我实现了一个RadioGroup,只能选择其中一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.android.temperatureconverter.MainActivity">

    <EditText
        android:id="@+id/question_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter the temperature."
        android:inputType="number"
        android:paddingLeft="18dp"
        android:paddingTop="18dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="18dp"
        android:paddingTop="18dp"
        android:text="Convert to?"
        android:textAllCaps="true"
        android:textSize="24sp"
        android:typeface="sans" />


    <RadioGroup
        android:id="@+id/options"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="18dp"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/celsius"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Celsius"
            android:textSize="20sp" />

        <RadioButton
            android:id="@+id/fahrenheit"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Fahrenheit"
            android:textSize="20sp" />
    </RadioGroup>

        <Button
            android:id="@+id/convert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="CONVERT"
            android:textSize="20sp"
            android:typeface="monospace" />

    <TextView
        android:id="@+id/answer_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

该程序第一次正常工作。但是,如果我想再次转换两者,正在选择单选按钮,这很令人费解。我真的很陌生,所以我想知道发生了什么......

2 个答案:

答案 0 :(得分:1)

注释掉以下几行。

celsius.setId(button1);
fahrenheit.setId(button2);

这基本上就是问题。

此外,这将解决问题。

button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view){
                    int number = Integer.parseInt(temp.getText().toString());
                    TextView text = (TextView) findViewById(R.id.answer_text);
                    double answer;
                    int id=-1;
                    if(fahrenheit.isChecked())
                    {
                        id=1;
                    }
                    else if(celsius.isChecked())
                    {
                        id=2;
                    }
                    System.out.println("Selected option is "+id);
                    if(id == 1){
                        answer = number*1.8 + 32;     //Convert to Fahrenheit
                        text.setText("" + answer);
                    }
                    else if (id ==2){
                        answer = (number-32)/1.8;
                        text.setText("" + answer);    //Convert to Celsius
                    }
                    if(id == -1){
                        text.setText("Please select an option");
                    }

                }
            });

答案 1 :(得分:0)

将这两行代码放在onClick方法的开头:

 celsius.setChecked(false);     
 fahrenheit.setChecked(false);