按下按钮后如何关闭对话框

时间:2016-11-28 14:49:21

标签: android

我有一个活动打开一个包含4个EditTexts的对话框,我需要用户输入所有编辑文本才能继续,如何强制用户输入所有字段?

修改 即使用户按下后退按钮 这是我的代码:

private void showEnterNamesDialog(final boolean edit){
    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.enter_names_dialog, null);
    dialogBuilder.setView(dialogView);

    final EditText[] plyrs_et = new EditText[4];

    plyrs_et[0] = (EditText)dialogView.findViewById(R.id.plyr1_et_dialog);
    plyrs_et[1] = (EditText)dialogView.findViewById(R.id.plyr2_et_dialog);
    plyrs_et[2] = (EditText)dialogView.findViewById(R.id.plyr3_et_dialog);
    plyrs_et[3] = (EditText)dialogView.findViewById(R.id.plyr4_et_dialog);

    if(edit){
        String[] names = gameList.getNames();
        for (int i = 0; i < 4; i++){
            plyrs_et[i].setText(names[i]);
        }

        dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
    }

    dialogBuilder.setTitle(getResources().getString(R.string.enter_players_names));

    dialogBuilder.setPositiveButton(getResources().getString(R.string.submit_btn), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            String[] names = new String[4];

            for(int j = 0; j < 4 ; j++){
                names[j] = plyrs_et[j].getText().toString();
            }
            if(names[0].isEmpty() || names[1].isEmpty() || names[2].isEmpty() || names[3].isEmpty()) {
                Toast error = Toast.makeText(getApplicationContext(), getResources().getString(R.string.toast_alert), Toast.LENGTH_SHORT);
                error.show();
            }else {
                if(edit){
                    //set the names in textViews
                    hp1.setText(names[0]);
                    hp2.setText(names[1]);
                    hp3.setText(names[2]);
                    hp4.setText(names[3]);

                    gameList.setNames(names);
                }else {
                    gameList.setNames(names);
                    setHeaderFooter(names);
                    listView.setAdapter(mAdapter);
                }
            }
        }
    });

    AlertDialog b = dialogBuilder.create();
    b.show();
}

此代码仅提供Toast消息,但仍会关闭对话框。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过覆盖正面按钮尝试此代码。如果验证失败,它将不会关闭警报对话框。

alertDialogBuilder.setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // do nothing we overide this
                            }
                        })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                                dialog.cancel();
                            }
                        });
        alertDialogBuilder.setTitle("Committee Details");
        // create alert dialog
        final AlertDialog alertDialog = alertDialogBuilder.create();
        // show it
        alertDialog.show();
        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(validate()) {
                    //your work after validation and close alert dialog
                    alertDialog.dismiss();
                }
            }
        });

并且在validate()方法中,您可以强制执行验证

public boolean validate() {
    boolean t=true;
    if(cName.getText().toString().length()==0) {
        cName.setError("Commitee name cannot be Blank!!");
        t=false;
    }
    if(amount.length()==0){
        amount.setError("Amount cannot be Blank!!");
        t= false;
    }
    if(duration.getText().toString().length()==0) {
        duration.setError("Duration cannot be Blank!!");
        t= false;
    }
    if(noOfMember.getText().toString().length()==0) {
        noOfMember.setError("Number of Members cannot be Blank!!");
        t= false;
    }
    if(StartDate.length()<10) {
        StartDate.setError("Input Date");
        t = false;
    }
    return t;
}