Как сделать так, чтобы мой AlertDialog появлялся, как только EditText фокусировался? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу, чтобы мой AlertDialog всплыл, как только у моего EditText появится фокус.Прямо сейчас я должен дважды щелкнуть по EditText.

При первом нажатии на EditText появляется программная клавиатура (для ввода непосредственно в моем Edittext).Затем, во второй раз, когда я нажимаю EditText, появляется AlertDialog.

Как мне его получить, так что для всплывающего AlertDialog требуется только один щелчок мышью?

Вот мой код:

По моему onCreate ...

//when user clicks on "commentName" EditText we want a new AlertDialog to open
commentName.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    AlertDialog.Builder builder = new AlertDialog.Builder(NewContact.this);
    builder.setTitle("Ur Comment:");

    //start the following xml file/ layout
    View viewInflated = LayoutInflater.from(NewContact.this).inflate(R.layout.comment_text_pop_up, null, false);
    builder.setView(viewInflated);

    // Set up the buttons
    builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
      }
    });
    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
      }
    });

    builder.show();

  }
});

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Это сделало это для меня, OnTouchListener:

 //when user clicks on "commentname" edittext we want a new textbox to open
    commentname.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {

        if(event.getAction() == MotionEvent.ACTION_UP) {
          AlertDialog.Builder builder = new AlertDialog.Builder(NewContact.this);
          builder.setTitle("Ur Comment:");

          //start the following xml file/ layout
          View viewInflated = LayoutInflater.from(NewContact.this).inflate(R.layout.comment_text_pop_up, null, false);
          builder.setView(viewInflated);

          // Set up the buttons
          builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
              dialog.dismiss();
            }
          });
          builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
              dialog.cancel();
            }
          });

          builder.show();
          return true;

        }
        return false;

      }
    });
0 голосов
/ 12 декабря 2018

Другой способ сделать это с наименьшим количеством кода - просто отключить фокус на EditText.Вы можете сделать это, добавив указанный ниже атрибут к вашему EditText ...

<EditText
...
android:clickable="true"
android:focusable="false"/>

Затем установите OnClickListener на вашем EditText и отобразите диалоговое окно в методе onClick().

0 голосов
/ 12 декабря 2018

Я заставил его работать согласно вашему описанию с помощью OnFocusChangeListener.

Просто замените весь фрагмент из вашего вопроса следующим.И вставьте код AlertDialog под комментарием.

// commentName is your EditText
commentName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            return; // Prevents alert from being shown when losing focus.
        }
        // Your AlertDialog code goes here
    }
});

if (!hasFocus) предотвращает отображение предупреждения, когда пользователь нажимает что-то еще, что приводит к потере фокуса EditText.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...