android edittext 搜索框,Android EditText实现搜索框实时处理,优化数据请求

使用EditText实现搜索框,优化数据请求 ,实现实时搜索展示

6a977b9e92da

search.png

当EditText内容发生改变时等待500毫秒,Message携带当前EditText的内容数据通知Hadnler去进行处理,通过判断携带数据和EditText此时的内容数据是否相同决定是否进行数据请求。减少多余的请求,提高效率。

关键代码

private static final int MSG_SEARCH = 1;

/**

* 定义时传入持有的Activity实例(弱引用)

*/

private Handler mHandler = new SearchHandler(this);

mBinding.searchView.etSearch.addTextChangedListener(new SearchTextWatcher());

private class SearchTextWatcher 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) {

String str = s.toString();

//文字变动 , 有未发出的搜索请求,应取消

if (mHandler.hasMessages(MSG_SEARCH)) {

mHandler.removeMessages(MSG_SEARCH);

}

if (!TextUtils.isEmpty(str)) {

//否则延迟500ms开始搜索

Message msg = Message.obtain();

msg.what = MSG_SEARCH;

//携带当前值

msg.obj = s.toString();

mHandler.sendMessageDelayed(msg, 500);

}

}

}

/**

* 自定义Handler子类

* 设置为:静态内部类

*/

private static class SearchHandler extends Handler {

// 定义 弱引用实例

private WeakReference reference;

// 在构造方法中传入需持有的Activity实例

public SearchHandler(SeriesSearchActivity activity) {

// 使用WeakReference弱引用持有Activity实例

reference = new WeakReference(activity);

}

// 通过复写handlerMessage() 从而确定更新UI的操作

@Override

public void handleMessage(@NonNull Message msg) {

super.handleMessage(msg);

if (msg.what == MSG_SEARCH) {

SeriesSearchActivity activity = reference.get();

String searchText = activity.mBinding.searchView.etSearch.getText().toString();

if (msg.obj.toString().equals(searchText)) {

//查询搜索内容

activity.queryObjectiveCampaignByName(searchText);

}

}

}

}

@Override

protected void onDestroy() {

super.onDestroy();

// 外部类Activity生命周期结束时,同时清空消息队列 & 结束Handler生命周期

mHandler.removeCallbacksAndMessages(null);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值