使用EditText實(shí)現(xiàn)搜索框,優(yōu)化數(shù)據(jù)請(qǐng)求 ,實(shí)現(xiàn)實(shí)時(shí)搜索展示

image.png
- 當(dāng)EditText內(nèi)容發(fā)生改變時(shí)等待1000毫秒,Message攜帶當(dāng)前EditText的內(nèi)容數(shù)據(jù)通知Hadnler去進(jìn)行處理
- 通過(guò)判斷handler攜帶數(shù)據(jù)和EditText已存在的內(nèi)容數(shù)據(jù)是否相同決定是否進(jìn)行數(shù)據(jù)請(qǐng)求。
- 當(dāng)handler攜帶數(shù)據(jù)不為空并且和EditText已存在內(nèi)容數(shù)據(jù)相同時(shí)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,減少在輸入過(guò)程中不必要的請(qǐng)求發(fā)生
private final int searchWhat = 1;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == searchWhat) {
if (msg.obj.toString().equals(etSearch.getText().toString())) {//進(jìn)行判斷
pageNum = 1;
getDataList(pageNum, etSearch.getText().toString());
}
}
}
};
etSearch.addTextChangedListener(new MyTextWatcher());
List resultDataList;
public vo getDataList(int pageNum,String searchContext){
... 請(qǐng)求結(jié)果result 省略ListView和Adapter填充部分
resultDataList = result;
userSelectAdapter.notifyDataSetChanged();
}
private class MyTextWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() != 0 && s.toString().trim().length() != 0) {
Message msg = Message.obtain();
msg.what = searchWhat;
msg.obj = s.toString(); //攜帶當(dāng)前值
mHandler.sendMessageDelayed(msg, 1000);//隔一小段時(shí)間發(fā)送msg
} else {
resultDataList.clear();
userSelectAdapter.notifyDataSetChanged();
}
}
}