TextWatcher отслеживает только текущий ввод

У меня есть EditText, который связан с TextWatcher, я отслеживаю, когда пользователь нажимает букву @. В результате появится Listview с именами комментаторов конкретного поста. Когда пользователь выбирает одного из пользователей от ListView, имя будет от append до EditText, а ListView будет скрыт.

Но проблема в том, что когда пользователь продолжает вводить, ListView появится снова, потому что afterTextChanged(Editable s) контролирует весь введенный текст, который уже contains буква @.

Есть ли способ отслеживать только то, что пользователь действительно набирает, а не весь вводимый текст? Или как-то избежать последнего введенного слова в TextWatcher? Или любые другие предложения, как решить эту проблему.

Я искал, но ничего полезного не нашел. заранее спасибо

Пожалуйста, введите ваш код TextWatcher в вопросе.

Shashank Mishra 02.06.2018 15:15
0
1
39
1

Ответы 1

Этого можно добиться разными способами. Это одна из них. Вы можете проверить погоду, ваш список уже заполнен или нет.

  final boolean isListSet = false;
        public static final String textToFind = "@";
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!isListSet && s.toString().contains(textToFind)) {
                    // set your list here
                    isListSet = true;
                }
                if (!s.toString().contains(textToFind)) {
                    // remove your list
                    isListSet = false;
                }
            }
        });

Это решает одну проблему, но порождает другую. Что, если пользователь хочет ввести более одного комментатора, например @John, @Lisa и т. д.? Это будет работать только в том случае, если будет одно упоминание в комментарии, потому что ListView больше не появится, потому что isListSet - это true

Yupi 02.06.2018 15:46

Я так не думал. Я доработаю этот метод, подождите немного.

Khemraj Sharma 02.06.2018 15:48

Я думал написать для этого логику. Но здесь есть еще много вещей, которыми нужно управлять. Я могу написать это для вас. Но вот библиотека, которая будет вам полезна. github.com/linkedin/Spyglass

Khemraj Sharma 02.06.2018 15:54

Я предлагаю вам использовать эту библиотеку, если вы хотите улучшить вещи

Khemraj Sharma 02.06.2018 15:55

Другие вопросы по теме