如果已经发布了对此的答案,我很抱歉,但是我已经找了很久但找不到合适的东西。
我有四个单选按钮,想要处理不同的计算,具体取决于从输入数据中选择哪一个(来自编辑文本)。我也有一个按钮来开始计算。
整个过程与单选按钮分开。我知道我需要使用switch / case命令,但我不确定是否要设置它。
我在主要的活动java类中尝试了以下内容:
package com.minichanic.idealgas;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class MainActivity extends Activity implements android.view.View.OnClickListener{
Button add, subtract, multiply, divide, mod;
EditText pressin, volin, molin, tempin;
RadioButton radio0, radio1, radio2, radio3;
RadioGroup RadioGroup1;
private int variable;
/** Called when the activity is first created */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
// Reference TextViews and Buttons
pressin = (EditText) findViewById(R.id.editText1);
volin = (EditText) findViewById(R.id.editText2);
molin = (EditText) findViewById(R.id.editText3);
tempin = (EditText) findViewById(R.id.editText4);
add = (Button) findViewById(R.id.button1);
// Set listeners for when buttons are pressed
add.setOnClickListener(this);
}
/**
* Switch statement to decide which button was pressed droidacid.com
*/
public void onClick(View arg0) {
// Get values from EditTexts
double pressure = Double.parseDouble(pressin.getText().toString());
double volume = Double.parseDouble(volin.getText().toString());
double moles = Double.parseDouble(molin.getText().toString());
double temperature = Double.parseDouble(tempin.getText().toString());
// Perform relevant operations depending on radio button
// Check which radio button was clicked
switch(variable){
case R.id.radio0:
pressure = ((moles * 8.31* temperature)/volume);
break;
case R.id.radio1:
volume = ((moles * 8.31* temperature)/pressure);
break;
case R.id.radio2:
moles = ((pressure * volume) / (temperature * 8.31));
break;
case R.id.radio3:
temperature = ((pressure * volume) / (moles * 8.31));
break;
}
// Add result to Running total stored in output TextView
String tempresult = ""+temperature;
TextView tresult = (EditText) findViewById(R.id.editText4);
tresult.setText(tempresult);
String pressresult = ""+pressure;
TextView presult = (EditText) findViewById(R.id.editText1);
presult.setText(pressresult);
String molresult = ""+moles;
TextView mresult = (EditText) findViewById(R.id.editText3);
mresult.setText(molresult);
String volresult = ""+volume;
TextView vresult = (EditText) findViewById(R.id.editText2);
vresult.setText(volresult);
}
}
xml布局包含:
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/pressure" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/vol" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mol" />
<RadioButton
android:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/temp" />
</RadioGroup>
工作正常,直到我开始介绍单选按钮,现在它崩溃了。 非常感谢任何想法。
答案 0 :(得分:3)
我将此作为另一个答案发布,因为评论时间过长。
将android:onClick="onRadioButtonClicked"
设置为每个单选按钮
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/pressure"
android:onClick="onRadioButtonClicked"
/>
...
创建存储当前所选单选按钮的局部变量,并将其设置为默认单选按钮
...
View selectedRadio;
...
public void onCreate(Bundle savedInstanceState) {
...
selectedRadio = findViewById(R.id.radio0);
...
}
...
创建方法onRadioButtonClicked
,在单击指定的单选按钮并将变量selectedRadio设置为当前选定的单选按钮后将调用该方法
public void onRadioButtonClicked(View view) {
selectedRadio = view;
}
然后调整您的onClick
方法以执行计算
public void onClick(View arg0) {
...
switch(selectedRadio.getId()) {
case R.id.radio0:
// your code
break;
case R.id.radio1:
// another code
break;
...
}
...
}
希望这会对你有所帮助。没有测试过这段代码,但应该可以使用。
答案 1 :(得分:0)