Android 如何在alertdialog中引用EditText?

Android 如何在alertdialog中引用EditText?,android,android-edittext,android-alertdialog,Android,Android Edittext,Android Alertdialog,这是我的密码: public void openDialog(){ final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); AlertDialog alert = alertDialogBuilder.create(); final EditText a = (EditText) alert.findViewById(R.id.kekekeke); Layou

这是我的密码:

public void openDialog(){

    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

    AlertDialog alert = alertDialogBuilder.create();
    final EditText a = (EditText) alert.findViewById(R.id.kekekeke);

    LayoutInflater inflater = getLayoutInflater();
    alertDialogBuilder.setView(inflater.inflate(R.layout.list_example, null));
    alertDialogBuilder
        .setMessage("Enter a New Name")
        .setPositiveButton("Edit Name", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                myRef.child(Utils.object.getKey()).child("sfasf").setValue(a.getText().toString());
            }
        });
}

我的问题是我得到了以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()


我很困惑,因为我认为我已经通过
edittext

访问了它。您可以像下面这样引用它

LayoutInflater inflater = getLayoutInflater();
View v = inflater.inflate(R.layout.list_example, null);
EditText a = (EditText) v.findViewById(R.id.kekekeke);
alertDialogBuilder.setView(v);
试试这个

public void openDialog(){

final AlertDialog.Builder alertDialogBuilder =
        new AlertDialog.Builder(this);

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.list_example, null);
alertDialogBuilder.setView(view);


final EditText a = (EditText) view.findViewById(R.id.kekekeke);


alertDialogBuilder    .setMessage("Enter a New Name")
        .setPositiveButton("Edit Name", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {


myRef.child(Utils.object.getKey()).child("sfasf").setValue(a.getText().toString());


            }
        })

AlertDialog alert = alertDialogBuilder.create();
alert.show();

您应该首先膨胀视图

问题是,当您从警报对话框获取引用时,它没有设置视图,因此在您调用setview之前它没有任何内容,因此您之前调用过它,它没有提供任何内容,因此您得到了空指针

public void openDialog(){

    final AlertDialog.Builder alertDialogBuilder =
            new AlertDialog.Builder(this);

    AlertDialog alert = alertDialogBuilder.create();


    LayoutInflater inflater = getLayoutInflater();
    alertDialogBuilder.setView(inflater.inflate(R.layout.list_example, null));
final EditText a = (EditText) alert.findViewById(R.id.kekekeke);
   alertDialogBuilder    .setMessage("Enter a New Name")
            .setPositiveButton("Edit Name", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                myRef.child(Utils.object.getKey()).child("sfasf").setValue(a.getText().toString());


                }
            })

问题是,当您尝试从视图获取引用时,警报对话框没有指向视图,因此在您将视图设置为AlertDialog之前,警报对话框没有任何内容,因此它返回NullPointerException

只需将此代码替换为您的代码

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

AlertDialog alert = alertDialogBuilder.create();

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.list_example, null);
final EditText a = (EditText) view.findViewById(R.id.kekekeke);

alertDialogBuilder.setView(view);

alertDialogBuilder
    .setMessage("Enter a New Name")
    .setPositiveButton("Edit Name", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            myRef.child(Utils.object.getKey()).child("sfasf").setValue(a.getText().toString());
        }
    });

setView
之后调用
findViewById
。你好,兄弟,你可以看到我的答案。。。你不必使用布局充气器Android有自己的方法来显示自定义对话框谢谢,我会在7分钟后接受它,你能说明为什么这样做,这样我才能更好地理解它吗?你尝试的是在设置自定义视图之前获取EditText的引用。我所做的是首先获取布局的引用,然后尝试从布局中获取EditText