Android警报对话框中的EditText

时间:2019-04-15 07:08:21

标签: android alertdialog

我有一种在片段中创建警报对话框的方法

private void alertDialog() {
final EditText editTextField = new EditText(this.getContext());
AlertDialog dialog = new AlertDialog.Builder()
    .setTitle("Title")
    .setMessage("Message")
    .setView(editTextField)
    .setPositiveButton("OK", this)
    .setNegativeButton("Cancel", null)
    .create();
dialog.show();
}

然后我实现了DialogInterface.OnClickListener

public void onClick(DialogInterface dialogInterface, int i){
 switch(i){
    case DialogInterface.BUTTON_POSITIVE:
        String name = String.valueOf(editTextField.getText());
        break;
    case DialogInterface.BUTTON_NEGATIVE:
        break;
   }
 }

但是,editTextField中的onClick无法引用“警报对话框”。反正有解决办法吗?还是唯一的方法是使用编辑文本和setView进入警报对话框生成器来创建布局?

2 个答案:

答案 0 :(得分:1)

在 Kotlin 上也一样:

    val inputEditTextField = EditText(requireActivity())
    val dialog = AlertDialog.Builder(requireContext())
        .setTitle("Title")
        .setMessage("Message")
        .setView(inputEditTextField)
        .setPositiveButton("OK") { _, _ ->
                val editTextInput = inputEditTextField .text.toString()
                Timber.d("editext value is: $editTextInput")
        }
        .setNegativeButton("Cancel", null)
        .create()
    dialog.show()

答案 1 :(得分:0)

您无法访问editTextField的原因是因为它在alertDialog()方法中被声明为局部变量。

如果要将该变量保留为局部变量,则需要直接在该方法中设置侦听器方法,如下所示。

private EditText = new EditText(this);
AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("Title")
                .setMessage("Message")
                .setView(inputEditTextField)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        String editTextInput = inputEditTextField.getText().toString();
                        Log.d("onclick","editext value is: "+ editTextInput);
                    }
                })
                .setNegativeButton("Cancel", null)
                .create();
dialog.show();


否则,您可以将alertDialog()方法中的该行替换为下面的这一行

editTextField = new EditText(this.getContext());


您需要在onCreate方法上方添加此行

EditTextField editTextField;