2015-11-26 3 views
3

Я использую AutoCompleteTextView для предложений по адресам.AutoCompleteTextView - Показать предложения после выбора

Что я хочу сделать, когда пользователь вводит адрес (например, «Ма»), предложения отображаются как «Мэри, Мэдли, Ма ...».

Затем, когда пользователь выбирает одно из предложений, он немедленно получает другие предложения, содержащие полный адрес.

Например: Он выбрал «Мэри», и он получает предложения, такие как «Mary 123, Boston», «Mary 1566, New York», «Mary Jane 569, New York».

Проблема в том, что предложения заполнены адаптером, но не показаны. Выпадающий список не отображается после выбора.

Пока мой текст наблюдающий присваивается AutoCompleteTextView ответственность за предложения:

TextWatcher textWatcher = new TextWatcher() { 

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

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

     if(etStreet.isPerformingCompletion()) 
      return; 

     List<String> arrayValues = getValues(); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), 
       android.R.layout.simple_dropdown_item_1line, arrayValues); 
     etUlica.setAdapter(adapter); 

    } 
}; 

Я пытался дозвониться showDropDown() по пункту нажмите, изменение текста и любого другого события, но он просто не будет показывать вверх. Он отображается только тогда, когда пользователь вводит на клавиатуре.

+0

понятия не может быть, это не работает или не может ... попытаться отобразить предложение снова после выбора сделанной пользователем, написав autocompletetextview.showDropDown(); –

+0

@MustanserIqbal Я объяснил, что пробовал это во многих местах, но он все равно не покажется. –

+0

Я должен работать, но, возможно, в этом случае он не будет работать .. coz я не тестировал –

ответ

5

записи ниже кода в AutoCompleteTextView.setOnItemClickListener()

autoComplete.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      autoComplete.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        autoComplete.showDropDown(); 
       } 
      },100); 
      autoComplete.setText(autoComplete.getText().toString()); 
      autoComplete.setSelection(autoComplete.getText().length()); 

     } 
    }); 

И вот, он будет работать как шарм !!!

Это даст вам намек на ваш вопрос, изменится в соответствии с вашими потребностями и адаптера данных

+1

Спасибо! Оно работает! –

+0

Да, похоже, это работает, но почему? Какая операция должна завершиться за эти 100 мс? И если это займет больше времени, что произойдет? – personne3000

+0

Что я узнал: Android закроет выпадающее меню после onItemClick, поэтому вызов showDropdown там не будет работать. Моя рекомендация состоит в том, чтобы использовать onDismissListener для инициализации следующего предложения там, вместо этого использование задач, отложенных с произвольной продолжительностью. – personne3000