Shu*_* A. 15 android searchview
SearchView在我的应用程序中使用a .
无论如何,我可以延迟调用onQueryTextChange()方法.就像,当用户键入一系列字符时,他必须等到调用此方法之前.
这种等待应该不依赖于输入的字符数,但还没有一个小停顿正在热播方法之前需要.
我想暂停,因为当用户键入搜索视图时,带有字符串的请求将被发送到服务器以请求匹配的数据,然后我将根据建议填充我的ListView.
活动信息(如果需要):
实施SearchView.OnQueryTextListener.
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
Run Code Online (Sandbox Code Playgroud)
小智 30
要延迟对服务器的调用,请在onQueryTextChange方法中使用以下代码,变量mQueryString和mHandler必须是类变量.
@Override
public boolean onQueryTextChange(String searchTerm) {
mQueryString = searchTerm;
mHandler.removeCallbacksAndMessages(null);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//Put your call to the server here (with mQueryString)
}
}, 300);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这应该对你有帮助,你的类需要实现"SearchView.OnQueryTextListener",并且必须在你的类中声明"cntr"
对于常规用户输入,这已经是闪烁的,如果你想等待更多,只需提高"waitingTime".
请求应该在"onFinish"内
private int waitingTime = 200;
private CountDownTimer cntr;
@Override
public boolean onQueryTextChange(String newText) {
if(cntr != null){
cntr.cancel();
}
cntr = new CountDownTimer(waitingTime, 500) {
public void onTick(long millisUntilFinished) {
Log.d("TIME","seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
Log.d("FINISHED","DONE");
}
};
cntr.start();
return false;
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用 Kotlin 协程。宣布倒计时工作
private lateinit var textChangeCountDownJob: Job
Run Code Online (Sandbox Code Playgroud)
然后 onQueryTextChange:
override fun onQueryTextChange(newText: String): Boolean {
if(::textChangeCountDownJob.isInitialized)
textChangeCountDownJob.cancel()
textChangeCountDownJob = launch(UI) {
delay(800)
}
return false
}
Run Code Online (Sandbox Code Playgroud)