2011-07-25 39 views
2

我正在開發一個android應用程序。我的佈局中有一個autocompleteTextView。我想用我的服務器的建議來填充這個textView。服務器上有大約400個關鍵字,它們在不久的將來會增加,所以我不能一次解析所有標籤,然後檢查建議。 autocompleteTextView應該更像谷歌搜索,所以我只解析時,用戶鍵入的東西,解析發生在UI線程。自動完成文本視圖+ Json服務器動態獲取標籤

但我在這裏無法觸發該解析器,因爲我無法獲得該回調方法,或者可能是感知用戶鍵入了某些內容或可能編輯了某些文本的事件。

setOnEditorActionListener僅當用戶按下軟鍵盤上的輸入按鈕時才起作用。

在此先感謝

+0

以及我得到它的方法是setTextChangeListener參考以下鏈接http://stackoverflow.com/questions/ 3954244 /獲取電流,建議從 - autocompletetextview – abhishek

回答

3

您也可以使用Filter接口來實現此功能。結果Filter.performFiltering()僅僅爲了這種目的被調用掉UI線程。下面是一些代碼,我用它來做到這一點:

 Filter filter = new Filter() { 

     @Override 
     public CharSequence convertResultToString(Object resultValue) { 
      return resultValue.toString(); 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence charSequence) { 
      if(charSequence == null) return null; 
      try { 
       // This call hits the server with the name I'm looking for and parses the JSON returned for the first 25 results 
       PagedResult results = searchByName(charSequence.toString(), 1, 25, true); 
       FilterResults filterResults = new FilterResults(); 
       filterResults.values = results.getResults(); 
       filterResults.count = results.getResults().size(); 
       return filterResults; 
      } catch (JSONException e) { 
       return new FilterResults(); 
      } 
     } 

     @Override 
     protected void publishResults(CharSequence charSequence, FilterResults filterResults) { 
      if(filterResults != null) { 
       adapter.clear(); 
       adapter.addAll((List<MyObject>)filterResults.values); 
      } 
     } 
    }; 

然後使用過濾器:

private AutoCompleteTextView beverageName; 
    ... 

    beverageName = findViewById(R.id.beverageName); 
    ListAdapter adapter = ... 
    adapter.setFilter(filter); 
    beverageName.setAdapter(adapter); 
0

可以使用TextWatcher接口做一些事情,每當用戶更改一個EditText視圖中的文本。只需實現一個或多個TextWatcher的方法,我通常使用onTextChanged()。希望有所幫助!