2016-04-27 101 views
0

我從API獲取數據(List),我試圖用此數據更新我的AutcompleteTextViewAutocompleteTextView沒有動態更新

這是我目前怎麼辦:
我有一個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做了這個,使用相同的過程,並且一切正常。

任何意見或解決方案將非常感激

編輯:我注意到一些奇怪的東西:數據未綁定到適配器,因爲adapter#getCount總是返回0,即使列表不爲空。但是當我刪除at_address.setAdapter(addressAdapter)時,數據適配器被更新並且adapter#getCount返回正確數量的元素。

我現在很困惑,請幫忙!

+0

autoComplete()裏面是什麼? – 2016-04-27 22:22:34

+0

這是我用來獲取列表的方法,但它工作正常,我相信問題不是來自這裏。 (如果它不工作,Log.i(「addresses」,suggestions_address.toString());'不會打印任何東西) –

回答

0

取而代之的是:

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

,你可以只使用這樣的:

suggestions_address.addAll(data); 

您呼叫notifyDataSetChanged啓動請求後,你應該調用它,你得到的結果和更新後suggestions_address,所以在onCompleted裏調用notifyDataSetChanged