У меня есть EditText, который связан с TextWatcher, я отслеживаю, когда пользователь нажимает букву @. В результате появится Listview с именами комментаторов конкретного поста. Когда пользователь выбирает одного из пользователей от ListView, имя будет от append до EditText, а ListView будет скрыт.
Но проблема в том, что когда пользователь продолжает вводить, ListView появится снова, потому что afterTextChanged(Editable s) контролирует весь введенный текст, который уже contains буква @.
Есть ли способ отслеживать только то, что пользователь действительно набирает, а не весь вводимый текст? Или как-то избежать последнего введенного слова в TextWatcher? Или любые другие предложения, как решить эту проблему.
Я искал, но ничего полезного не нашел. заранее спасибо
Этого можно добиться разными способами. Это одна из них. Вы можете проверить погоду, ваш список уже заполнен или нет.
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
Я так не думал. Я доработаю этот метод, подождите немного.
Я думал написать для этого логику. Но здесь есть еще много вещей, которыми нужно управлять. Я могу написать это для вас. Но вот библиотека, которая будет вам полезна. github.com/linkedin/Spyglass
Я предлагаю вам использовать эту библиотеку, если вы хотите улучшить вещи
Пожалуйста, введите ваш код
TextWatcherв вопросе.