我们先来看一下效果图:
我们输入要搜索的型号,型号列表的数据跟着变动,怎么来实现呢,我们先来看一下思路:
1、监测EditText的内容变化,利用Handler来通知子线程;
2、在子线程中调用String的contains()方法,将含有输入内容的数据放在新的集合里面,调用在adapter写
的adapterChange()方法来更改界面。
那么我们就跟着这个思路来看代码:
对EditText进行监测
searchEdit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
//当有内容的时候,出现删除图标
if (s.length() == 0) {
deletImag.setVisibility(View.GONE);
} else {
deletImag.setVisibility(View.VISIBLE);
}
//通知子线程数据变化了
mHandler.post(eChange);
}
});
}
通知子线程数据变化
Runnable eChange = new Runnable() {
@Override
public void run() {
String searchData = searchEdit.getText().toString().trim();
//更改界面
getmDataSub(modelArray, searchData);
}
};
更改界面
/**
* 获得根据搜索框的数据data来从元数据筛选,筛选出来的数据放入mDataSubs里
*
* @param mDataSubs
* @param data
*/
private void getmDataSub(JSONArray array, String data) {
newJsonArry = new JSONArray();
int length = array.length();
for (int i = 0; i < length; ++i) {
if (array.optString(i).contains(data)) {
newJsonArry.put(array.optString(i));
}
}
modelAdapter.adapterChange(newJsonArry, modelIndex);
}
设置叉叉的点击事件,即清空功能
/**
* 设置叉叉的点击事件,即清空功能
*/
private void setDeletOnClick() {
deletImag.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
searchEdit.setText("");
}
});
}
这样就可以完成我们想要的效果了。