алертыдодиалог проверка правки текста - PullRequest
0 голосов
/ 24 мая 2018

У меня есть диалоговое окно с добавленным текстом редактирования.Имеет положительные и отрицательные кнопки.Всякий раз, когда я нажимаю кнопку «позитив / ок», диалоговое окно закрывается, даже если текст редактирования пуст.

Я хочу получить контроль над этим поведением.а именно;Я хочу, чтобы alerttdialog завершал работу, только если текст редактирования не пустой.

Примечание: strAuthorDesc - это строковая переменная.

Вот код, который выполняется при нажатии кнопки.

                AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                builder.setTitle("Author Desc.");
                final EditText descInput = new EditText(mActivity);
                descInput.setInputType(InputType.TYPE_CLASS_TEXT);
                descInput.setTextColor(ContextCompat.getColor(mActivity, R.color.black));
                descInput.setLines(5);
//                    descInput.setMaxLines(5);
                descInput.setGravity(Gravity.LEFT | Gravity.TOP);
                descInput.setSingleLine(false);
                descInput.setHorizontalScrollBarEnabled(false);
                builder.setView(descInput);

                builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        strAuthorDesc = descInput.getText().toString();
                        if(strAuthorDesc != null && !strAuthorDesc.equals("")){
                            dialog.dismiss();
                            Const.showToast("Description added", mActivity);
                            setAuthorDesc();
                        }else{
                            Const.showToast("Desc. cannot be empty!", mActivity);
                        }
                    }
                });
                builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                    }
                });

            alertDialog = builder.create();
            alertDialog.setCancelable(false);
            alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
            alertDialog.show();

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

Я решил проблему, используя класс Dialog вместо AlertDialog / Builder или расширяя DialogFragment или класс Dialog.

Вот код.

private void showDescDialog(boolean isEditingDesc, String textToEdit){
    final Dialog dialog = new Dialog(mActivity);
    dialog.setContentView(R.layout.custom_dialog_author_desc);
    dialog.setTitle("");

    TextView tvHeading = (TextView) dialog.findViewById(R.id.tv_heading);
    final EditText descInput = (EditText) dialog.findViewById(R.id.et_author_desc);
    Button btnSave = (Button) dialog.findViewById(R.id.btn_save);
    Button btnCancel = (Button) dialog.findViewById(R.id.btn_cancel);

    if(isEditingDesc){
        descInput.setText(textToEdit);
        tvHeading.setText("Edit author description");
    }else{
        tvHeading.setText("Add author description");
    }

    btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            strAuthorDesc = descInput.getText().toString();
            if(!TextUtils.isEmpty(strAuthorDesc)){
                Const.showToast("Description added", mActivity);
                setAuthorDesc();
                dialog.dismiss();
            }else{
                Const.showToast("Desc. cannot be empty!", mActivity);
            }
        }
    });

    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.cancel();
        }
    });

    dialog.setCancelable(false);
    dialog.show();
}
0 голосов
/ 24 мая 2018

Я думаю, я понял это.Теперь то, что происходит, - это состояние по умолчанию - закрывать диалоговое окно при нажатии положительной или отрицательной кнопки, поэтому нам нужно переопределить положительную кнопку и затем выполнить проверку там.вот код ниже.

      AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Author Desc.");
        final EditText descInput = new EditText(this);
        descInput.setInputType(InputType.TYPE_CLASS_TEXT);
        descInput.setTextColor(ContextCompat.getColor(this, android.R.color.black));
        descInput.setLines(5);
//                    descInput.setMaxLines(5);
        descInput.setGravity(Gravity.LEFT | Gravity.TOP);
        descInput.setSingleLine(false);
        descInput.setHorizontalScrollBarEnabled(false);
        builder.setView(descInput);

        builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

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

            }
        });

        alertDialog = builder.create();
        alertDialog.setCancelable(false);
        alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        alertDialog.show();

        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                descInput.getText().toString();
                if(descInput.getText().toString().equals("")){
                    Log.d("Test","Is empty");


                }else{
                    Log.d("Test","Is Not Empty "+descInput.getText().toString());
                    alertDialog.dismiss();
                }
            }
        });

Надеюсь, это поможет!

Я нашел проблему, связанную с диалогом, и по этой ссылке Как предотвратить закрытие диалога при нажатии кнопкинажата

0 голосов
/ 24 мая 2018

Поставьте builder.setCancelable(false); ниже вашего определения построителя alertDialog.

Тогда ваши положительные / отрицательные кнопки

                    builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        strAuthorDesc = descInput.getText().toString();
                        if(strAuthorDesc != null && !strAuthorDesc.equals("")){

После закрытия диалогового окна не вызывайте никакой метод,вызовите dismiss () за последний

                                dialog.dismiss();
                                Const.showToast("Description added", mActivity);
                                setAuthorDesc();
                            }else{
                                Const.showToast("Desc. cannot be empty!", mActivity);
                            }
                        }
                    });
                    builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();

                        }
                    });
0 голосов
/ 24 мая 2018

проверить, является ли editext пустым или нет

проверить приведенный ниже код для справки

EditText usernameEditText = (EditText) findViewById(R.id.editUsername);
sUsername = usernameEditText.getText().toString();
if (sUsername.matches("")) {
    Toast.makeText(this, "You did not enter a username", Toast.LENGTH_SHORT).show();
    return;
}

Проверить ниже ОБНОВЛЕННЫЙ код сВаш кодекс будет работать для вас

                    AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                    builder.setTitle("Author Desc.");
                    final EditText descInput = new EditText(mActivity);
                    descInput.setInputType(InputType.TYPE_CLASS_TEXT);
                    descInput.setTextColor(ContextCompat.getColor(mActivity, R.color.black));
                    descInput.setLines(5);
    //                    descInput.setMaxLines(5);
                    descInput.setGravity(Gravity.LEFT | Gravity.TOP);
                    descInput.setSingleLine(false);
                    descInput.setHorizontalScrollBarEnabled(false);
                    builder.setView(descInput);

                    builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            strAuthorDesc = scInput.getText().toString();
                           if (strAuthorDesc.matches("")) {
                           dialog.dismiss();
                           Const.showToast("Description added",mActivity);
                           setAuthorDesc();
                           }else{
                              Const.showToast("Desc. cannot be empty!",mActivity);
            }
                        }
                    });
                    builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();

                        }
                    });

                alertDialog = builder.create();
                alertDialog.setCancelable(false);
                alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
                alertDialog.show();
...