0

我有一個城市列表(其中約2500)。我希望用戶在從列表中的edittextbox中輸入時獲得自動建議。這是如何實現的?我已經通過搜索Google,但找不到任何關於此的教程。非常感謝任何幫助。 謝謝。從Edittext的列表視圖中的文字過濾Android

回答

2

您應該使用AutoCompleteTextView來實現此目的。

下面的代碼片段顯示瞭如何創建這表明不同國家的名字,同時在用戶鍵入文本視圖:

public class CountriesActivity extends Activity { 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.countries); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_dropdown_item_1line, COUNTRIES); 
     AutoCompleteTextView textView = (AutoCompleteTextView) 
       findViewById(R.id.countries_list); 
     textView.setAdapter(adapter); 
    } 

    private static final String[] COUNTRIES = new String[] { 
     "Belgium", "France", "Italy", "Germany", "Spain" 
    }; 
} 
+0

非常感謝,但我想稍微改變一下,我有一個適配器列表前10名(這是一個靜態列表)。現在,當用戶在edittext框中輸入時,我想從我擁有的其他城市列表中篩選。我怎樣才能做到這一點? – Namratha

+1

編寫自定義適配器並將其傳遞給AutoCompleteTextView – Alex

+0

通過編輯文本和列表視圖使用AutoCompleteTextView並將類型化文本傳遞給列表適配器的過濾器有什麼優勢? – Namratha

0

您可以使用「Filter」從其他列表中進行搜索。 實現您自己的過濾器[MyFilter extends Filter]並覆蓋「FilterResults performFiltering(CharSequence prefix)」和「void publishResults(CharSequence constraint,FilterResults results)」方法,以在您自己的數據(國家/地區列表)上實現您自己的搜索邏輯。

添加在您的適配器getMyFilter()方法將返回一個「新myfilter」的 添加「TextWatcher」你「的EditText」 內部「onTextChanged()」的TextWatcher的方法,通過調用myAdapter讓您的過濾器.getMyFilter()」。在該過濾器,稱之爲 「myFilter.filter(myTypedString)」。

過濾後 「無效publishResults(CharSequence的約束,FilterResults結果)」 的方法將被調用,裏面的是,改變你的實際適配器數據刷新您的用戶界面