2016-04-27 6 views
0

Я получаю данные (List) от API, и я пытаюсь обновить свои AutcompleteTextView этими данными.AutocompleteTextView не обновляется динамически

Это, как я в настоящее время сделать:
У меня есть TextWatcher, который называет метод, чтобы получить данные в afterTextChanged, поэтому каждый раз, когда пользователь прекращает вводить метод называется, и адаптер уведомляется `` notifyDataSetChanged :

//in onCreate 
    addressAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,suggestions_address); 
    at_address.setAdapter(addressAdapter); 

... 

@Override 
     public void afterTextChanged(Editable s) { 

      autoComplete(s); 

      addressAdapter.notifyDataSetChanged(); 

      //suggestions_address is the updated list, and when I print it I can see the 
      //results so it is not empty 
      Log.i("addresses",suggestions_address.toString()); 

     } 

... 

class SuggestionQueryListener implements ResultListener<List<String>> { 
    @Override 
    public void onCompleted(List<String> data, ErrorCode error) { 
     if (error != ErrorCode.NONE) { 
      Toast.makeText(MainActivity2.this,error.toString(),Toast.LENGTH_LONG).show(); 
     } else { 
      suggestions_address.clear(); 
      for(int i = 0;i<data.size();i++){ 
       suggestions_address.add(data.get(i)); 
      } 
     } 
    } 
} 
public void autoComplete(CharSequence s) { 
    try { 

     String term = s.toString(); 
     TextSuggestionRequest request = null; 
     request = new TextSuggestionRequest(term).setSearchCenter(new GeoCoordinate(48.844900, 2.395658)); 
     request.execute(new SuggestionQueryListener()); 
     if (request.execute(new SuggestionQueryListener()) != ErrorCode.NONE) { 
      //Handle request error 
      //... 
     } 
    } catch (IllegalArgumentException ex) { 
     // 
    } 
} 

Но, похоже, адаптер не обновляется, потому что он не отображает предложения, когда я что-то печатаю.
Кроме того, перед этим с AutoCompleteTextView я сделал это с listView, с тем же процессом, и все сработало хорошо.

Любые идеи или решения действительно были бы оценены

EDIT: я заметил что-то действительно странное: данные не переплетены к адаптеру, так как adapter#getCount всегда возвращает 0, даже если список не пуст. Но когда я удаляю at_address.setAdapter(addressAdapter), адаптер данных обновляется, и adapter#getCount возвращает правильное количество элементов.

Я действительно смущен прямо сейчас, пожалуйста, помогите!

+0

Что находится внутри автозаполнения()? –

+0

Это метод, который я использую для получения списка, но он работает нормально, я уверен, что проблема не возникает здесь. (Если он не работал, «Log.i» («адреса», предложения_address.toString()); 'ничего не печатает) –

ответ

0

Вместо этого:

for(int i = 0;i<data.size();i++){ 
      suggestions_address.add(data.get(i)); 
     } 

вы можете использовать только это:

suggestions_address.addAll(data); 

вы звоните notifyDataSetChanged после запуска запроса, вы должны назвать это после того, как вы получите результат и обновления suggest_address, поэтому вызов notifyDataSetChanged внутри onCompleted

Смежные вопросы