Android AutoCompleteTextView с '@' упоминает фильтрацию, такую ​​​​как twitter и facebook

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

Я понимаю, как использовать функцию AutoCompleteTextView для фильтрации. Но я не уверен, как захватить символы из последнего слова после символа «@» (игнорируя любые предыдущие слова).

Следовательно, когда пользователь был выбран из списка AutoCompleteTextView, он должен заменить слово на «@», например.


"Это сообщение для @steve"


когда пользователь нажимает «Стив» из списка, текст должен замениться на:


"Это сообщение для Стива"


Мне также нужно получить строку в форме, которую я могу отправить на сервер. то есть из приведенного выше примера мне нужно было бы отправить строку:


"Это сообщение для [имя пользователя:[email protected], id:44]."


Я просмотрел https://github.com/splitwise/TokenAutoComplete.

Что кажется отличным для ввода электронных писем в список, но я не уверен, как удовлетворить мои потребности. Имейте в виду, что мне нужно поддерживать множественные/дублирующиеся упоминания:

eg


"Это сообщение для Стива и Боба. Это второе предложение в сообщении для Боба"


Если кто-то знает или делал что-то подобное, буду очень признателен!


person FlashAsh99    schedule 13.09.2015    source источник


Ответы (2)


В итоге я использовал библиотеку spyglass из linkedin, которая делает именно то, что я искал. Он предоставляет MentionsEditText (который можно настроить). Я также использовал ListPopupWindow для отображения предложений в списке (например, AutoCompleteTextView).

Ссылка здесь...

https://github.com/linkedin/Spyglass

person FlashAsh99    schedule 16.09.2015
comment
как вы получаете строку с этим форматом? : Это сообщение для [имя пользователя:[email protected], id:44]. - person Ana Llera; 08.03.2016
comment
@FlashAsh99 Не могли бы вы рассказать, как вы заменили текст после использования подзорной трубы? - person bala; 20.09.2016
comment
@FlashAsh99 Я тоже хочу знать, как ты заменил текст на подзорную трубу - person ranjitzade; 19.04.2017
comment
@FlashAsh99: Прямо сейчас код в git получает дату пользователя/города из необработанного файла. Есть ли способ загрузить динамический массив для этого? - person Manu; 02.08.2017
comment
Ответить на @AnaLlera? - person neobie; 17.11.2018
comment
Я также использовал ту же библиотеку. Но в моем случае текст редактирования находится внизу. Всплывающее окно закрывает клавиатуру - person Raghunandan; 29.04.2021

Следующий метод извлечет слова, начинающиеся с «@»:

private void parseText(String text) {
    String[] words = text.split("[ \\.]");
    for (int i = 0; i < words.length; i++) {
        if (words[i].length() > 0
                && words[i].charAt(0) == '@') {
            System.out.println(words[i]);
        }
    }
}

Когда у вас есть слова, используйте фильтр автозаполнения и, наконец, замените текст с помощью String.replace.

person mapm    schedule 13.09.2015