从自定义对话框视图进行充气时,EditText为null

时间:2012-10-12 15:32:58

标签: android view android-alertdialog layout-inflater

我正在尝试从EditText获取文本,但我已经注销了EditText并且它为null。我试图从自定义视图中膨胀它。我错了吗?

我知道prompsView是我的自定义AlertDialog视图,其中是我的EditText。也许我应该在充气时传递提示视图,只是不知道该怎么做。

public void showPasswordDialogBox(){

        LayoutInflater li = LayoutInflater.from(NfcscannerActivity.this);
        View promptsView = li.inflate(R.layout.passwordpromptdialogboxlayout, null);

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

        // set prompts.xml to alertdialog builder
        alertDialogBuilder.setView(promptsView);



        // set dialog message
        alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    EditText passwordPin = (EditText)findViewById(R.id.passwordprompttextview);
                    Log.e(TAG, "edittext is null ? " + passwordPin);
                    String passPin = passwordPin.getText().toString();
                    Log.e(TAG, "password from edittext = " + passPin);

                    Cursor c = nfcscannerapplication.loginValidate.queryAllFromCarer();
                    if(c != null){
                        c.moveToLast();
                        String passPinFromDB =  c.getString(c
                                .getColumnIndex(LoginValidate.C_PASSWORD));

                        if (passPin.trim().equalsIgnoreCase(passPinFromDB)){

                            Log.e(TAG, "passwords match");
                            DateTime now = new DateTime();
                            DateTimeFormatter fmt = DateTimeFormat.forPattern("d-MMM-Y");
                            String formattedNow = fmt.print(now);
                            String[] params = new String[]{carerID, formattedNow}; 
                            AsyncGetRota agr = new AsyncGetRota();
                            agr.execute(params);

                        }else{
                            Toast.makeText(NfcscannerActivity.this,
                                    "Please check Password/Pin",
                                    Toast.LENGTH_LONG).show();
                            showPasswordDialogBox();
                        }

                    }else{
                        Log.e(TAG, "cursor null while trying to verify password in showPasswordDialogBox() ");
                    }

                }
              })
            .setNegativeButton("Cancel",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                dialog.cancel();
                }
              });

        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();



        // show it
        alertDialog.show();
    }

1 个答案:

答案 0 :(得分:2)

尝试:

EditText passwordPin = (EditText) promptsView.findViewById(R.id.passwordprompttextview);