Результаты AutoCompleteTextView пусты на месте

У меня есть AutoCompleteTextView, и он прекрасно работает, пока я не добавлю пробел к своему вводу. Если бы у меня был, скажем, список многих исторических событий (Битва за Британию (1940 г.), Битва за Арденну (1944 г.), [вставьте множество сражений], роковой марш Наполеона (1812 г.), [вставьте множество других исторических событий]) .

Когда ввожу "Битва" или "битва", получаю список всех сражений (хотя там вроде макс), а когда ввожу "Британия", в результатах появляется "Битва за Британию (1940)". Однако, когда я ввожу пробел после «Битвы», все записи результатов исчезают.

Я читал, что не могу найти никаких полезных сообщений или вопросов по этой теме, кроме this, но это не дал мне никаких ответов.

Есть ли способ, чтобы AutoCompleteTextView продолжал автозаполнение после вставки пробела?

Изменить: я не вижу смысла добавлять код, так как это просто AutoCompleteTextView с адаптером со строками, но ладно, это происходит в onCreate():

auto = (AutoCompleteTextView) findViewById(R.id.auto);
String[] events = getListOfEvents();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, events);
auto.setAdapter(adapter);

где getListOfEvents() просто читает и помещает все исторические события в String[]


person stealthjong    schedule 23.10.2012    source источник
comment
Может быть, вы можете поделиться кодом?   -  person user    schedule 23.10.2012
comment
Я не очень вижу смысла, но см. дополнение. Это просто (по умолчанию?) поведение AutoCompleteTextView, которое подняло мой вопрос.   -  person stealthjong    schedule 23.10.2012


Ответы (1)


Автоматическое завершение прерывается при вставке этого символа пробела, потому что под капотом он использует фильтр из адаптера, установленного на AutoCompleteTextView (ArrayAdapter в вашем случае). Фильтр по умолчанию ArrayAdapter использует пробелы в качестве разделителя, чтобы разбить текст каждой строки адаптера на слова, которые затем проверяются на входе фильтра. Это не даст никаких результатов, потому что входной фильтр (в котором есть пробел) не будет соответствовать ни одному слову из строки (поскольку эти слова не имеют пробела в конце). Например, строка "Битва за Британию" не будет соответствовать "Битва", потому что "Битва" не будет соответствовать ни одному слову "Битва", "of" или "Британия", полученные в результате разделения исходного текста после " ".

Если вы хотите, чтобы это работало, вам придется реализовать свой собственный Adapter, который будет возвращать Filter, учитывающий этот пробел после слова.

person user    schedule 23.10.2012
comment
Спасибо, посмотрю, наверное, вечером. Если получится, проверю. - person stealthjong; 23.10.2012
comment
@ChristiaandeJong Вам удалось внедрить фильтр? Проверьте этот вопрос stackoverflow.com/questions/12911915/ - person user; 25.10.2012
comment
Я еще не исправил. Попробую на выходных, потому что кода есть (не так уж и много), но очень немногие объясняют, что на самом деле происходит. Все советуют сделать мою собственную реализацию getFilter(). Но мне придется выяснить, как. - person stealthjong; 25.10.2012