Android AlertDialog 没有用单选按钮关闭
Android AlertDialog does not close with radiobutton
我有一个带有单选按钮的 AlertDialog。当我单击一个选项时,它会将值插入到文本视图中,但我无法在之后关闭 window。
private void showRadioButtonDialog() {
LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vewInflater = inflater.inflate(R.layout.dialog_installments_radiogroup, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
builder.setView(vewInflater);
builder.setTitle("Dialog title");
RadioGroup currencySettingRadioGroup = vewInflater.findViewById(R.id.radio_group);
ArrayList<String> listArr = getInstallmentsList(amountToPay, 12);
for ( String items: listArr ) {
RadioButton rb = new RadioButton(this);
rb.setText(items);
currencySettingRadioGroup.addView(rb);
rb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rb.setChecked(true);
TextView tvInstallments = findViewById(R.id.tvInstallments);
tvInstallments.setText(items);
dialog.dismiss(); // <== does not work
}
});
}
builder.show();
}
show()
方法在内部调用 create()
。
您可以通过调用 builder.create()
获得对内置对话框的引用,但是当您调用 builder.show()
时 Android 也会这样做。这意味着 Android 有自己的 Dialog 实例,您的 dialog
变量没有引用它。
使用 dialog.show()
代替 builder.show()
。
您还需要builder.create()
在您设置完Builder的所有属性后调用(将其移至builder.setTitle()
下方)。
我有一个带有单选按钮的 AlertDialog。当我单击一个选项时,它会将值插入到文本视图中,但我无法在之后关闭 window。
private void showRadioButtonDialog() {
LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vewInflater = inflater.inflate(R.layout.dialog_installments_radiogroup, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final AlertDialog dialog = builder.create();
builder.setView(vewInflater);
builder.setTitle("Dialog title");
RadioGroup currencySettingRadioGroup = vewInflater.findViewById(R.id.radio_group);
ArrayList<String> listArr = getInstallmentsList(amountToPay, 12);
for ( String items: listArr ) {
RadioButton rb = new RadioButton(this);
rb.setText(items);
currencySettingRadioGroup.addView(rb);
rb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rb.setChecked(true);
TextView tvInstallments = findViewById(R.id.tvInstallments);
tvInstallments.setText(items);
dialog.dismiss(); // <== does not work
}
});
}
builder.show();
}
show()
方法在内部调用 create()
。
您可以通过调用 builder.create()
获得对内置对话框的引用,但是当您调用 builder.show()
时 Android 也会这样做。这意味着 Android 有自己的 Dialog 实例,您的 dialog
变量没有引用它。
使用 dialog.show()
代替 builder.show()
。
您还需要builder.create()
在您设置完Builder的所有属性后调用(将其移至builder.setTitle()
下方)。