想必大家應該遇到過這樣的情況,當點擊Spinner控件後彈出的列表內容超多,一個一個滑動著去尋找所要的項很麻煩,尤其是當自己知道想要選擇的內容,這時候如果我們只需要輸入某些關鍵字,就可以講上百條數據篩選出幾十條甚至更少,豈不是會方便很多。
其實這是項目中的一個需求,由於目前公司接觸的多數和數據采集相關的PDA項目,有很多填寫項一個spinner已經不方便滿足需求,雖然客戶還沒有提出,但提前做好優化總是沒有錯的,所以項目組的同事提出這個需求並讓我嘗試著去做出來,當中給了我不少幫助和意見。
閒言少敘,簡單說下這個demo的實現,點擊一個button,彈出一個類似spinner的界面,包含一個edittext和listview,當在輸入框中鍵入關鍵字時,下面的listview所顯示的數據可以隨之進行篩選,點擊item,將所選值返回給button。實現其實不難,只不過接觸了一個新的知識而已,就是TextWatcher,它本身是一個接口,需要實現並覆蓋它的三個方法,在每個方法中執行相應的操作,然後在需要的控件上添加監聽即可。先來看本Demo實現後的效果
進入後點擊按鈕 彈出數據界面
輸入關鍵字進行篩選 點擊子項目返回給按鈕
以下是部分代碼的實現,其實比較簡單,唯一不太熟悉的就是TextWatcher,因為之前沒用過,但是很簡單,只有三個方法,現實了就OK了
首先介紹一下這個自己寫的類,它實現了一個數據的值value和顯示名稱Name的綁定,可以很方便的用於添加數據,當然也可以使用自己的方法去添加數據,本例子我就用這個了。
package com.cogent.enumbutton;
/**
* 一個Value(綁定值)-Name(顯示名稱)對象,如:1-漢族
*/
public class ValueNameDomain {
private String Value;//綁定的值
private String Name;//顯示的選項名稱
public ValueNameDomain(){}
public ValueNameDomain(String name,String value){
this.Name = name;
this.Value = value;
}
/**
* 獲取綁定的值
*/
public String getValue() {
return Value;
}
/**
* 設置綁定的值
*/
public void setValue(String value) {
this.Value = value;
}
/**
* 獲取顯示的選項名稱
*/
public String getName() {
return Name;
}
/**
* 設置顯示的選項名稱
*/
public void setName(String name) {
this.Name = name;
}
@Override
public String toString() {
return Name;
}
}