AutoCompleteTextView не показывает выпадающее меню, когда я нажимаю пробел после ввода полного слова

Мой основной код активности:

// here you put all your data. String[] dataArray = { "Amit sharma Kumar", "Hisham Kumar Munner", "Vineet John Chaturvedi", "Lucky Kumar Verma" }; ArrayList<String> alAutoCompleteList; AutoCompleteTextView acTV; ArrayAdapter<String> adapter1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // etAuto = (EditText) findViewById(R.id.etAuto); acTV = (AutoCompleteTextView) findViewById(R.id.acTV); // Arraylist alAutoCompleteList = new ArrayList<String>(); adapter1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_dropdown_item_1line, alAutoCompleteList); acTV.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if (acTV.enoughToFilter()) { acTV.showDropDown(); acTV.bringToFront(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub alAutoCompleteList.clear(); } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub String acText = acTV.getText().toString().trim(); for (String item : dataArray) { if (item.toLowerCase().contains(acText.toLowerCase())) { alAutoCompleteList.add(item); } } acTV.setThreshold(4); acTV.setAdapter(adapter1); acTV.showDropDown(); } }); 

Когда я ищу «шарму» и нажимаю пробел после этого, предложения уходят. Я хочу, чтобы эти предложения остались там. Я пытался сделать все, но не получил никакого успеха. Может ли кто-то помочь?

Изменить: может кто-нибудь попробовать этот код на своих эмуляторах? Просто добавьте AutoCompleteTextView в xml и запустите его.

Solutions Collecting From Web of "AutoCompleteTextView не показывает выпадающее меню, когда я нажимаю пробел после ввода полного слова"

Во-первых, есть ли причина, по которой вы устанавливаете прослушиватель TextWatcher в AutoCompleteTextView ? Если вы сделали это для фильтрации данных самостоятельно, вы не должны этого делать (потому что виджет делает это по умолчанию, а ваш код неверен).

Когда я нахожу «sharma» и нажимаю пробел после этого. Предложения уходят. Я хочу, чтобы эти предложения остались там.

Это происходит из-за адаптера и реализации Filter по умолчанию, который поставляется вместе с ним, элементов, которые AutoCompleteTextView использует под капотом, чтобы предоставить значения, которые вы видите в раскрывающемся списке. Поведение по умолчанию для ArrayAdapter – это тот, который вы видите, вы можете найти объяснение в этом ответе . Решение состоит в том, чтобы реализовать собственный адаптер с фильтром, который будет искать данные строки адаптера для строки фильтра. Я взял код класса ArrayAdapter из SDK и сделал небольшую настройку, поэтому фильтрация не ArrayAdapter при вставке пробела после слова. Здесь вы можете найти класс, так как код будет большой для публикации. Просто скопируйте класс в свой проект и используйте его как обычный ArrayAdapter :

 FilterWithSpaceAdapter<String> adapter1; //... adapter1 = new FilterWithSpaceAdapter<String>(MainActivity.this, android.R.layout.simple_dropdown_item_1line, dataArray); 

Прежде всего, вам не нужен TextWatcher с AutoCompleteTextView потому что AutoCompleteTextView имеет свой собственный метод просмотра текста, то есть MyWatcher . Вам необходимо использовать:

 setThreshold(3); final String[] AndroidDesk= getResources().getStringArray(R.array.clothname_arrays); ArrayAdapter<String> My_arr_adapter= new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line,AndroidDesk); cloths.setThreshold(1); cloths.setAdapter(My_arr_adapter); cloths.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { } }); 

Вам не нужен Textwatcher, AutoCompleteTextView использует фильтр адаптера, который вы установили. Адаптер по умолчанию фильтрует записи, вызывая toString () на них. Естественно, если пользователь вводит пробел, значения больше не совпадают. Чтобы реализовать это поведение, вы не должны добавлять текстовый элемент, а создавать пользовательский адаптер. Вы все равно можете расширить ArrayAdapter или SimpleAdapter. Вы реализуете свое настраиваемое поведение фильтрации (в вашем случае вызов trim ()), переписывая getFilter () и publishResults (). Здесь или здесь вы можете найти примеры того, как это сделать.

Я думаю, что есть проблемы в текстовом наблюдателе, потому что автоматическое полное текстовое представление не нуждается в текстовом наблюдателе, потому что это событие автоматического прослушивания. Вам нужно просто передать свой массив в адаптер вместо списка. AlAutoCompleteList ther не имеют никакого значения в списке. Вы никогда не добавляли значение в список.

  • Либо вам нужно сделать: alAutoCompleteList.add («data one»); AlAutoCompleteList.add («данные два»);

  • Или передать dataArray в адаптер. Adapter1 = новый ArrayAdapter (MainActivity.this, android.R.layout.simple_dropdown_item_1line, dataArray);

  • Нет необходимости использовать наблюдателя текста.