2014-09-29 121 views
0

我對AutoCompleteTextView和支持它的自定義適配器有疑問。由於我使用的是自定義適配器,一個擴展爲ArrayAdapter<Locality>(其中Locality是普通模型類)的類,是否可以在用戶鍵入某些文本但不從下拉列表中單擊該項目時獲取選定項目。自動完成文本視圖和自定義適配器獲取所選項目

例如,假設我使用的是setOnItemClickListener (AdapterView.OnItemClickListener l)。我可以得到哪個項目被點擊,因此被選中。這看起來很簡單,但如果用戶鍵入完整文本而不點擊建議下拉列表中的任何項目,會發生什麼情況。 onItemClick將永遠不會觸發,即使用戶輸入的文本是有效的項目文本(本例中爲位置名稱),也不會有任何選定的項目。

一個選項是檢查輸入的文本,並使用該文本找到與服務器調用相匹配的位置。但這肯定看起來很粗糙,所以我希望得到一些建議。

回答

0

您可以在autocompletetextview設置addTextChangeListener這樣

myAutoComplete.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      readSearchTerm(s.getText().toString()); 
     } 
    }); 



private List<String> readSearchTerm(String userInput) { 
    // TODO Auto-generated method stub 
    List<String> searchItemList = new ArrayList<String>(); 

    try { 
     for (int i = 0; i < myObjectList.size(); i++) { 

      myObjectList.get(i).objectName = myObjectList.get(i).objectName 
        .replace(" ", "-"); 

      String itemArray[] = myObjectList.get(i).objectName.split("-"); 

      for (int j = 0; j < itemArray.length; j++) { 

       Log.i("mini", "Item:" + itemArray[j]); 
       if (itemArray[j].contains(userInput)) { 
        searchItemList.add(myObjectList.get(i).objectName); 
        break; 
       } 
      } 

     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return searchItemList; 

} 

只是根據你的code.You改變閱讀搜索詞方法將得到過濾列表或項目匹配的項目

+0

我已經有一個列表。當用戶鍵入一個字符時,我從服務器獲取匹配的項目並將其顯示爲下拉菜單。所以在任何時候,我已經有一個與當前輸入的文本匹配的項目列表。它只是如果用戶沒有通過點擊從列表中選擇任何項目,所選項目在我的代碼中不可用。儘管我可以從輸入的文本中構建它,但我一直在尋找一種更乾淨的方法 – Jatin 2014-09-29 05:33:07

相關問題