我决定在 Android 中为我的科学展览制作一个应用程序,但我已经走进了死胡同!
我正在尝试使用单选按钮作为单位选择方法来制作单位转换器。
一切都很好,但是当我选择另一个单选按钮时,应用程序崩溃了!
我不知道发生了什么?
这是我的 XML 布局:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="30dp" >
<RadioGroup
android:id="@+id/from"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left" >
<RadioButton
android:id="@+id/km"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:onClick="radioClicked"
android:text="KiloMeters" />
<RadioButton
android:id="@+id/m"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="radioClicked"
android:text="Meters" />
<RadioButton
android:id="@+id/cm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="radioClicked"
android:text="Centimeters" />
</RadioGroup>
<Space
android:id="@+id/Space1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical" />
<EditText
android:id="@+id/KmValue"
android:layout_width="115dp"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:layout_marginLeft="0dp"
android:ems="10"
android:inputType="numberDecimal" />
<RadioGroup
android:id="@+id/to"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/mTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="38dp"
android:checked="true"
android:onClick="radioClicked"
android:text="Meters" />
<RadioButton
android:id="@+id/cmTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="radioClicked"
android:text="Cenitmeters" />
<RadioButton
android:id="@+id/mmTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="radioClicked"
android:text="Millimeters" />
</RadioGroup>
<TextView
android:id="@+id/MValue"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/cButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Convert" />
</TableLayout>
这是我的Java Activity:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class LengthFragment extends Fragment {
public LengthFragment(){}
double ratio = 1000;
int x=1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_length, container, false);
final EditText km = (EditText) rootView.findViewById(R.id.KmValue);
final TextView meter = (TextView) rootView.findViewById(R.id.MValue);
Button convert = (Button) rootView.findViewById(R.id.cButton);
convert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(km.getText().toString().isEmpty()) {
Toast.makeText(getActivity(), "Enter Something Buddy!", Toast.LENGTH_SHORT).show();
} else {
float k = Float.parseFloat(km.getText().toString());
double m = k*ratio;
meter.setText(""+m);
}
}
});
return rootView;
}
public void radioClicked(View view) {
boolean checked = ((RadioButton) view).isChecked();
switch(view.getId()) {
case R.id.km:
if (checked)
x=1;
break;
case R.id.m:
if (checked) {
x=2;
}
break;
case R.id.cm:
if (checked)
x=3;
break;
case R.id.mTo:
if (checked)
if(x==1) {
ratio=1000;
}
else if(x==2) {
ratio=1;
}
else if(x==3) {
ratio=0.01;
} else {
}
break;
case R.id.cmTo:
if (checked)
if(x==1) {
ratio=100000;
}
else if(x==2) {
ratio=100;
}
else if(x==3) {
ratio=1;
} else {
}
break;
case R.id.mmTo:
if (checked)
if(x==1) {
ratio=1000000;
}
else if(x==2) {
ratio=1000;
}
else if(x==3) {
ratio=10;
} else {
}
break;
}
}
}
我可以发布答案所需的任何内容。请帮忙!
最佳答案
不用将 OnClick 实现为 RadioButton,只需实现 RadioGroup setOnCheckedChangeListener :
RadioGroup from = (RadioGroup) rootView.findViewById(R.id.from);
from.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup arg0, int id) {
if (id==R.id.km) {
x=1;
}else if(id==R.id.m){
x=2;
}else if(id==R.id.cm)
x=3;
}
});
还以相同的方式应用 setOnCheckedChangeListener for RadioGroup 并从 xml 中删除 OnClick。
关于java - 单选按钮 : Listener in XML or JAVA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27458965/