Показывать alertDialog setpositiveButton, только когда выполняются некоторые условия - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь включить positivebutton из AlertDialog только когда текст задан в обоих полях editText, но это не работает, т.е. PositiveButton не отображается, даже если у меня есть текст в обоих полях .

Конечно, если у меня нет текста в обоих полях, я получаю ошибку NumberFormatException: empty String

  case R.id.action_geolocate:
    AlertDialog.Builder placePicker = new AlertDialog.Builder(this);
    LayoutInflater li = LayoutInflater.from(this);
    final View view = li.inflate(R.layout.fragment_place, null);
    placePicker.setView(view);
    placePicker.setTitle("Enter Latitude and Longitude");
    final EditText lat2 = view.findViewById(R.id.lati2);
    final EditText long2 = view.findViewById(R.id.longi2);
    if (lat2.getText().toString().length()>0 && long2.getText().toString().length()>0) {
      placePicker.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
          Lat = Double.parseDouble(lat2.getText().toString());
          Long = Double.parseDouble(long2.getText().toString());
          setupViewPager();
        }
      });
    }
    placePicker.setNegativeButton("Cancel", null);
    placePicker.show();
    return true;

Обновление

        placePicker.setNegativeButton("Cancel", null);
        AlertDialog pp = placePicker.create();

        pp.show();
        pp.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
        if (!TextUtils.isEmpty(lat2.getText().toString())){
          pp.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
        }
        return true;

Ответы [ 3 ]

2 голосов
/ 09 февраля 2020

Обновлен код ниже:

AlertDialog.Builder placePicker = new AlertDialog.Builder(MainActivity.this);
            LayoutInflater li = LayoutInflater.from(MainActivity.this);
            final View view = li.inflate(R.layout.fragment_dialog, null);
            placePicker.setView(view);
            placePicker.setTitle("Enter Latitude and Longitude");
            final EditText lat2 = view.findViewById(R.id.lat);
            final EditText long2 = view.findViewById(R.id.lng);

            placePicker.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (!TextUtils.isEmpty(lat2.getText().toString()) && !TextUtils.isEmpty(long2.getText().toString())) {
                        Lat = Double.parseDouble(lat2.getText().toString());
                        Long = Double.parseDouble(long2.getText().toString());
                    }
                }
            });

            placePicker.setNegativeButton("Cancel", null);
            final AlertDialog dialog = placePicker.create();

            lat2.addTextChangedListener(new TextWatcher() {



                @Override
                public void onTextChanged(CharSequence s, int start, int before,
                                          int count) {
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                                              int after) {
                }

                @Override
                public void afterTextChanged(Editable s) {

                    // Check if edittext is empty
                    if (TextUtils.isEmpty(s)) {
                        // Disable ok button
                        ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

                    } else {
                        // Something into edit text. Enable the button.
                        if (!TextUtils.isEmpty(long2.getText().toString())) {
                            ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                        }
                    }

                }
            });


            long2.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before,
                                          int count) {
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                                              int after) {
                }

                @Override
                public void afterTextChanged(Editable s) {

                    // Check if edittext is empty
                    if (TextUtils.isEmpty(s)) {
                        // Disable ok button
                        ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                    } else {
                        // Something into edit text. Enable the button.
                        if (!TextUtils.isEmpty(lat2.getText().toString())) {
                            ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                        }
                    }

                }
            });

            dialog.show();
            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

Надеюсь, что это работает для вас.

0 голосов
/ 09 февраля 2020

Создайте собственный диалог вместо AlertDialog. В представлении XML установите для атрибута видимости положительную кнопку «ушел». Затем в коде java, устанавливающем диалог, настройте .addTextChangedListener() для представлений EditText, и в этих слушателях проверьте длину введенной строки, и вы можете решить, когда вызывать positiveButton.visibility(View.VISIBLE);, чтобы вызвать положительную кнопку.

0 голосов
/ 09 февраля 2020

Перед проверкой длины ваших String с убедитесь, что они не null: if ((lat2.getText()!=null) && (long2.getText()!=null)) { if (lat2.getText().toString().length()>0 && long2.getText().toString().length()>0) {...

...