Android ListView/GridView 搜索過濾功能:
如下圖需要實現的功能:在搜索框輸入內容,列表只顯示與所輸內容相同的選項。
實現:
1.給EditText添加監聽事件
mEtSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
//當輸入框的內容不爲空時,顯示過濾後的數據列表,否則顯示全部列表
filterData(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
2.過濾列表數據
/**
* 根據輸入框中內容過濾數據,並更新GridView
* @param filterStr
*/
private void filterData(String filterStr) {
List<Face> filterDateList = new ArrayList<Face>();
//當輸入框的內容爲空時顯示全部列表
if (TextUtils.isEmpty(filterStr)) {
filterDateList = faceList;
} else {
//清空
filterDateList.clear();
//遍歷列表
for (Face face : faceList) {
String name = face.getFaceName();
if (name.trim()
.contains(mEtSearch.getText().toString())) {
filterDateList.add(face);
}
}
}
//更新GridView
adapter.updateGridView(filterDateList);
}
3.重置數據源,更新顯示列表
/**
* 當GridView數據發生變化時,更新GridView
* @param list
*/
public void updateGridView(List<Face> list){
this.data = list;
notifyDataSetChanged();
}