OnQueryTextChange被执行时,如何延迟Content Provider查询功能的执行



你好,我在我的android应用程序的自定义建议工作,我想延迟内容提供者查询方法的调用,直到用户完成输入搜索文本。如果我使用处理程序的返回语句被执行,进一步的控制转到内容提供者的查询函数,当处理程序执行后300毫秒,返回语句已经执行,没有进一步的控制被传递到内容提供者的查询方法。

override fun onQueryTextChange(newText: String): Boolean {
ViewCreator.setSearchText(newText)
if (newText.trim { it <= ' ' }.isEmpty()) {
val objSearchQuery = SearchQuery()
objSearchQuery.searchInstance(appCMSPresenter)
objSearchQuery.searchEmptyQuery(
"",
appCMSPresenter.isNavbarPresent,
appCMSPresenter.isAppbarPresent
)
NO_RESULT_DATA = false
}
return false
}

执行此代码后,它总是到达这里

@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
Cursor cursor;
String query = ((constraint == null) ? "" : constraint.toString());
if (query != null && query.length() != 0)
appCMSPresenter.sendSearchEvent(query);
try {
cursor = getSearchManagerSuggestions(searchableInfo, query, 5);
if (cursor != null) {
cursor.getCount();
return cursor;
}
} catch (RuntimeException e)    {
//Log.w(TAG, "runQueryOnBackgroundThread: " + e.getMessage());
}
return super.runQueryOnBackgroundThread(constraint);
}

在适配器类。我要做的是,它应该保持300毫秒在runQueryOnBackgroundThread()

您可以简单地使用EditText而不是使用SearchView来完成这项工作,下面是您可能想要使用的代码片段:

Timer timer1 = null;
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (timer1 != null) {
timer1.cancel();
}
}
@Override
public void afterTextChanged(Editable editable) {
timer1 = new Timer();
timer1.schedule(new TimerTask() {
@Override
public void run() {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(), "Your Code Goes Here!", Toast.LENGTH_SHORT).show();
}
});
}
}
}, 3000 /*Delay (In Milliseconds), Whatever you want to*/);
}
});

这将在用户键入时取消您的呼叫,并且在用户完成他/她的键入后调用afterTextChange。您应该使用的最佳输入延迟为750毫秒。

Happy Coding:)

最新更新