在自定义警报对话框中获取单选按钮的值
Get value of radio button in custom alert dialog
我创建了一个带有单选组、单选按钮和编辑文本的自定义提醒对话框。
目标是尝试从选定的单选按钮和编辑文本中获取文本值。此时只能获取到edittext中输入的值
看到下面的link,试过调整代码适配,但好像代码还是不行
Android getting value from selected radiobutton
http://www.mkyong.com/android/android-radio-buttons-example/
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/radioPersonGroup"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RadioButton
android:id="@+id/gButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="G" />
<RadioButton
android:id="@+id/kButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="K" />
</RadioGroup>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:ems="10"
android:hint=".00"
android:inputType="numberDecimal" />
</LinearLayout>
java 文件
private RadioButton radioSelectedButton;
...
FloatingActionButton fab = findViewById(R.id.fab);
final RadioGroup group = findViewById(R.id.radioPersonGroup);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final View dialogView = getLayoutInflater().inflate(R.layout.custom_dialog, null);
builder.setTitle("Who Paid")
.setView(dialogView)
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
int selectedId = group.getCheckedRadioButtonId();
radioSelectedButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,
radioSelectedButton.getText(), Toast.LENGTH_SHORT).show();
EditText input = dialogView.findViewById(R.id.editText2);
Toast.makeText(MainActivity.this,input.getText().toString(), Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
当我单击任一按钮然后单击“确定”以提交对话框时,出现以下异常。
java.lang.NullPointerException: 尝试在空对象引用
上调用虚拟方法'int android.widget.RadioGroup.getCheckedRadioButtonId()'
您在这一行中得到 NullPointerException
int selectedId = group.getCheckedRadioButtonId();
因为你在写
时试图"find"错误View
中的RadioGroup
final RadioGroup group = findViewById(R.id.radioPersonGroup);
RadioGroup
是 Dialog
的一部分,因此您需要在 dialogView 的 View
树中查找它:
// inside onClick()
final View dialogView = getLayoutInflater().inflate(R.layout.custom_dialog, null);
final RadioGroup group = dialogView.findViewById(R.id.radioPersonGroup);
同样,您需要在包含它的 ViewGroup
中 "find" selectedRadioButton。例如
radioSelectedButton = (RadioButton) dialogView.findViewById(selectedId);
或
radioSelectedButton = (RadioButton) group.findViewById(selectedId);
我创建了一个带有单选组、单选按钮和编辑文本的自定义提醒对话框。
目标是尝试从选定的单选按钮和编辑文本中获取文本值。此时只能获取到edittext中输入的值
看到下面的link,试过调整代码适配,但好像代码还是不行
Android getting value from selected radiobutton
http://www.mkyong.com/android/android-radio-buttons-example/
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/radioPersonGroup"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RadioButton
android:id="@+id/gButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="G" />
<RadioButton
android:id="@+id/kButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:text="K" />
</RadioGroup>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_weight="1"
android:ems="10"
android:hint=".00"
android:inputType="numberDecimal" />
</LinearLayout>
java 文件
private RadioButton radioSelectedButton;
...
FloatingActionButton fab = findViewById(R.id.fab);
final RadioGroup group = findViewById(R.id.radioPersonGroup);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final View dialogView = getLayoutInflater().inflate(R.layout.custom_dialog, null);
builder.setTitle("Who Paid")
.setView(dialogView)
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
int selectedId = group.getCheckedRadioButtonId();
radioSelectedButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,
radioSelectedButton.getText(), Toast.LENGTH_SHORT).show();
EditText input = dialogView.findViewById(R.id.editText2);
Toast.makeText(MainActivity.this,input.getText().toString(), Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
当我单击任一按钮然后单击“确定”以提交对话框时,出现以下异常。
java.lang.NullPointerException: 尝试在空对象引用
上调用虚拟方法'int android.widget.RadioGroup.getCheckedRadioButtonId()'您在这一行中得到 NullPointerException
int selectedId = group.getCheckedRadioButtonId();
因为你在写
时试图"find"错误View
中的RadioGroup
final RadioGroup group = findViewById(R.id.radioPersonGroup);
RadioGroup
是 Dialog
的一部分,因此您需要在 dialogView 的 View
树中查找它:
// inside onClick()
final View dialogView = getLayoutInflater().inflate(R.layout.custom_dialog, null);
final RadioGroup group = dialogView.findViewById(R.id.radioPersonGroup);
同样,您需要在包含它的 ViewGroup
中 "find" selectedRadioButton。例如
radioSelectedButton = (RadioButton) dialogView.findViewById(selectedId);
或
radioSelectedButton = (RadioButton) group.findViewById(selectedId);