天天看點

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

簡介 

在我們平常上網的時候經常會用到谷歌或百度,在輸入框中輸入我們想要輸入的資訊就會出現其他與其相關的提示資訊,非常友善。這種效果在Android中是用AutoCompleteTextView實作的,AutoCompleteTextView是一個可以編輯的文本view,當使用者鍵入時,會自動顯示完成建議資訊。 

建議清單顯示在下拉清單框中,可以選中某項代替編輯框裡的内容。 

當使用者點選Enter鍵時,或者什麼也沒有選中點選ENTER建時下拉清單會自動消失。 

建議清單是從一個資料擴充卡擷取的資料。 

step1:建立一個項目AutoComplete

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

step2:設計應用的UI界面   /layout/main.xml

step3:MainActivity.java

step4:部署應用到模拟器中

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

step5:進行幾次輸入,并點選搜尋按鈕儲存曆史記錄後,退出應用再重新進入應用

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

step6:這個時候再進行搜尋就會有自動補全的效果:

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示
我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

附注:

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

熟悉android清單開發的話,對于Adapter應該非常熟悉,上面的執行個體代碼,使用了android提供的ArrayAdapter,給予AutoCompleteTextView 綁定資料與視圖,我們要定制,首先從這裡開始。

和其他Adaper一樣,ArrayAdapter的基類也是BaseAdapter,我們可以定制自己的Adapter了。

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

可是一運作,木有反應,沒有一點提示?

的确,我們的視圖與資料是綁定了,可是AutoCompleteTextView 卻不能根據我們的Adapter擷取到合适的資料,因為adapter不符合要求!

我們反過來再研究一下ArrayAdapter,它除了是BaseAdapter的子類,它還實作了 Filterable 接口!

我們在AutoAdapter中,實作該接口,并傳回一個自定義的 Filter

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

那個AutoMailFilter又是一個什麼樣子的類呢?

先細細想想 AutoCompleteTextView 是怎樣工作的,對,它隻是對我們所輸入的一些字元,進行過濾、索引,并組成相應的視圖回報給我們的使用者,以提高我們的輸入效率!

那接下來就是建構核心過濾器的時候了,AutoCompleteTextView 隻會接收過濾後的資料,是以我們的資料源會多出一份拷貝,一份是原始的,一份則是過濾後的:

我的Android進階之旅------>Android用AutoCompleteTextView實作搜尋曆史記錄提示

在AutoMailFilter裡面,由于繼承了,我們必須實作兩個重要的方法:

protected FilterResults performFiltering(CharSequence prefix) 

在這個方法裡面定制過濾政策,根據輸入的prefix對資料進行過濾,并組裝成FilterResults 結果傳回;

protected void publishResults(CharSequence constraint, FilterResults results) 

這個方法則是釋出結果用的,把上面方法的結果按照一定的要求進行處理後,通知Adapter進行資料視圖的重新整理

總結:

按照 AutoCompleteTextView 的工作流程,它依賴兩個元件,Adapter 和 Filter,一個是視圖的處理,一個是資料過濾處理,對這兩個元件進行深度定制,我們就可以随心所欲了。

==================================================================================================

  作者:歐陽鵬  歡迎轉載,與人分享是進步的源泉!

繼續閱讀