【问题标题】:How to access EditText in Dialog?如何在对话框中访问 EditText?
【发布时间】:2019-04-23 23:02:23
【问题描述】:

我试图在对话框中访问 EditText 字符串,但我得到一个空对象引用错误,我不明白为什么:

        txtLostCreds.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Create dialog to set new password
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle(R.string.txtResetPassword);
                builder.setView(R.layout.customresetpassworddialog);
                final AlertDialog alert = builder.create();
                builder.setPositiveButton(R.string.txtResetPassword, new DialogInterface.OnClickListener() {
                    final EditText resetNewPassword = alert.findViewById(R.id.resetNewPassword);
                    final EditText resetNewPasswordConfirm = alert.findViewById(R.id.resetNewPasswordConfirm);
                    @Override
                    public void onClick(final DialogInterface dialog, int which) {
                        assert resetNewPassword != null;
                        assert resetNewPasswordConfirm != null;
                        if (checkPasswords(resetNewPassword, resetNewPasswordConfirm)) {
                           // reset the password
                           RequestParams params = new RequestParams();
                           params.put("uuid", prefs.getString("myUUID", ""));
                           params.put("newpassword", resetNewPassword.getText().toString());
                           AsyncHttpRequest.get("lost_credentials", params, new TextHttpResponseHandler() {
                               @Override
                               public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                                   t.MyToast(getResources().getString(R.string.txtConnError), 5000);
                               }

                               @Override
                               public void onSuccess(int statusCode, Header[] headers, String responseString) {
                                   if (responseString.equals("OK")) {
                                       // All done. Close dialog
                                       alert.cancel();
                                   } else {
                                       t.MyToast(getResources().getString(R.string.txtConnError) + responseString, 5000);
                                   }
                               }
                           });
                       }
                   }
                });
                builder.show();
            }
        });

当我调用函数checkPasswords(resetNewPassword, resetNewPasswordConfirm) 时发生错误。我也尝试在View v 上执行findViewByID,但它给出了同样的错误。

函数很简单:

private boolean checkPasswords(EditText resetNewPassword, EditText resetNewPasswordConfirm) {
        if (!resetNewPassword.getText().toString().equals(resetNewPasswordConfirm.getText().toString())) {
            resetNewPassword.setError(getResources().getString(R.string.txtDifferentPasswords));
            resetNewPasswordConfirm.setError(getResources().getString(R.string.txtDifferentPasswords));
            return false;
        } else {
            return true;
        }
    }

【问题讨论】:

标签: android android-alertdialog


【解决方案1】:

尝试保留对对话框视图的引用,或者至少是您在创建对话框的范围之外控制的部分。

更好的做法是创建一个 DialogFragment,这是对对话进行更多控制的好方法。当您的对话框管理许多操作时,这种方式非常有用。

例如:当您单击“保存”按钮时,尝试从您的 Dialog 获取输入并将其传递给您的 Activity。您可以使用onActivityResult() 将数据发送到您的活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多