您的位置:首页 > 其它

根据EditText输入框的内容动态更改listView的数据

2017-04-21 10:59 459 查看
我们先来看一下效果图:



我们输入要搜索的型号,型号列表的数据跟着变动,怎么来实现呢,我们先来看一下思路:

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("");
}
});

}


这样就可以完成我们想要的效果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: