如何在Dialog中访问EditText?

问题描述 投票:0回答:1

我试图在对话框中访问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)时发生错误。我也尝试在findViewByID上做一个View v,但它也给出了同样的错误。

功能很简单:

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个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.