【问题标题】:How do you reference EditText in alertdialog? [duplicate]你如何在 alertdialog 中引用 EditText? [复制]
【发布时间】:2019-11-14 18:53:25
【问题描述】:

这是我的代码:

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 访问了它。

【问题讨论】:

  • setView之后致电findViewById
  • 你好兄弟你可以看到我的答案...你不必使用布局充气器Android有自己的方法来显示自定义对话框

标签: android android-edittext android-alertdialog


【解决方案1】:

你可以像下面这样引用它

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

【讨论】:

  • 谢谢,我会在 7 分钟后接受它,你能具体说明为什么这样可以让我更好地理解它吗?
  • 您尝试的是在对其设置 customView 之前获取 EditText 的引用。我所做的是首先获取布局的引用,然后尝试从布局中获取 EditText
【解决方案2】:

试试这个,

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();

你应该先膨胀视图

【讨论】:

    【解决方案3】:

    问题是当你从它获取引用时,你的警告对话框没有设置视图,所以在你调用 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());
    
    
                    }
                })
    

    【讨论】:

      【解决方案4】:

      问题是当您尝试从视图获取引用时,您的警报对话框没有到视图,因此在您将视图设置为 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());
              }
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 2017-03-08
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        相关资源
        最近更新 更多