Android - 从alertbuilder对话框中检索文本输入

时间:2011-09-30 15:08:31

标签: java android xml alertdialog

我在xml文件中定义了一个View。它包含两个Edittext字段(其中包括文本等)

我使用AlertBuilder触发一个对话框,用户在两个edittext字段中输入文本(例如用户名和密码)。当我尝试检索字符串并将它们发送到Login()时,两个字符串都只是null。发生了什么事?

似乎某种方式没有保存字符串数据?

这是我在我的应用中显示对话框的时候:

SignInDialog.show(ScreenMain.this, 
                                "Login", 
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                        LayoutInflater inflater = (LayoutInflater) ScreenMain.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        View layout = inflater.inflate(R.layout.screen_dialog_login, null);
                                        LogIn(((EditText) layout.findViewById(R.id.screen_dialog_login_username_edit)).getText().toString(),
                                                        ((EditText) layout.findViewById(R.id.screen_dialog_login_password_edit)).getText().toString());

                                    }
                                }, 
                                "Cancel", 
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.cancel();
                                    }
                                });

这是我用来实例化对话的一个类:

/* login dialog*/
static class SignInDialog {

    public static void show(Context context, String positiveText, DialogInterface.OnClickListener positive, String negativeText, DialogInterface.OnClickListener negative){
        AlertDialog.Builder builder;

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.screen_dialog_login, null);

        builder = new AlertDialog.Builder(context);
        builder.setView(layout);
        if(positive != null && positiveText != null){
            builder.setPositiveButton(positiveText, positive);
        }
        if(negative != null && negativeText != null){
            builder.setNegativeButton(negativeText, negative);
        }

        builder.create().show();

    }
}

4 个答案:

答案 0 :(得分:1)

为什么不完全继承AlertDialog.Builder并添加一个方法来检索EditText值?

答案 1 :(得分:1)

扩充布局是为了创建它的新实例。 (您没有收到对现有实例的引用。)因此,在您的onClick中,您正在创建布局的新副本,并且您的字段不包含任何文本,因为它们与您的用户不同刚输入文字。

答案 2 :(得分:0)

做类似的事情:

View layout = inflater.inflate(R.layout.screen_dialog_login, null);

layout.findViewById(R.id.*yourwidget*);

我尝试了它并帮助了

答案 3 :(得分:0)

以下是我使用的方法:

private void showPopUp3() {          

                 AlertDialog.Builder helpBuilder = new AlertDialog.Builder(AlarmReceiverActivity.this);
                 helpBuilder.setTitle("hi");
                // helpBuilder.setMessage("This is a Simple Pop Up");
                 final EditText input = new EditText(this);
                 input.setHeight(20);
                 input.setText("");
                 LayoutInflater inflater = getLayoutInflater();
                 final View checkboxLayout = inflater.inflate(R.layout.alarm, null);


                 checkboxLayout.findViewById(R.id.Yes).setOnClickListener(new OnClickListener(){
                        public void onClick(View arg0) {
                            // setTitle("button2");
                            checkboxLayout.findViewById(R.id.note).setVisibility(View.VISIBLE);
                        }
                    });
                 checkboxLayout.findViewById(R.id.No).setOnClickListener(new OnClickListener(){
                        public void onClick(View arg0) {
                            // setTitle("button2");
                            checkboxLayout.findViewById(R.id.note).setVisibility(View.INVISIBLE);
                        }
                    });
                 helpBuilder.setView(checkboxLayout);

                 helpBuilder.setPositiveButton("No",
                   new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                     // Do nothing but close the dialog
                         mMediaPlayer.stop();
                         finish();
                    }
                   });
                 helpBuilder.setNegativeButton("Yes",
                           new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                             // Do nothing but close the dialog
                     mMediaPlayer.stop();

                        //showSimplePopUp();

                            }
                           });
                 // Remember, create doesn't show the dialog
                 AlertDialog helpDialog = helpBuilder.create();
                 helpDialog.show();
            }