Android开发Edittext延迟搜索
需求 :
点击Edittext输入1秒后,如果1秒内没有新输入的内容,就进行搜索 ;如果搜索内容改变,则remove掉handler里面的请求,直到无输入数据变化1秒后进行搜索
逻辑代码:
如下
public class EditTextActivity extends AppCompatActivity implements Handler.Callback {
private EditText etInput;
MyHandler mHandler = new MyHandler(this);
private static class MyHandler extends Handler {
WeakReference<EditTextActivity> mActivityReference;
MyHandler(EditTextActivity activity) {
mActivityReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
EditTextActivity activity = mActivityReference.get();
if (activity != null) {
activity.handleMessage(msg);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_text);
etInput = findViewById(R.id.et_input);
// 设置监听
etInput.addTextChangedListener(new 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 (mHandler.hasMessages(1002)) {//信息搜索
mHandler.removeMessages(1002);
}
//1000: //EditText输入变化延迟时间1s
mHandler.sendEmptyMessageDelayed(1002, 1000);
}
});
}
@Override
public boolean handleMessage(Message message) {
switch (message.what) {
case 1002://输入1s后显示(1s内输入数据无变化)
break;
}
return false;
}
}
布局文件:
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content" />