我有一个可搜索的工作Activity
,在ActionBar
的{{1}}(在软键盘上输入“Go”)提交输入后查询远程数据库。这很好用,但每次android.support.v7.widget.SearchView
的文本通过添加或删除字符更改时,我最终都会查询数据库。我的初始化代码SearchView
在下面。
SearchFragment.java (上述可搜索SearchView
的子片段)
Activity
我认为工作需要在上面的@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
// Get the searchable.xml data about the search configuration
final SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchInfo = searchManager.getSearchableInfo(getActivity().getComponentName());
// Associate searchable configuration with the SearchView
mSearchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
mSearchView.setSearchableInfo(searchInfo);
mSearchView.requestFocus();
mSearchView.onActionViewExpanded();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mSearchListAdapter.clear();
return false;
}
@Override
public boolean onQueryTextChange(String query) {
mSearchListAdapter.clear();
// Execute search ...
return false;
}
});
}
方法中完成,但我不确定需要调用什么。我想过调用onQueryTextChange(String query)
的{{1}}实例方法,但这似乎不是最佳做法。有没有人有类型到搜索的经验,并愿意分享有效的解决方案?
更新:
MainActivity.java (可搜索的SearchManager
)
startSearch
以上search interface design是Android团队在Google推荐的内容。
答案 0 :(得分:2)
到目前为止,我在阅读几页文档后遇到的唯一解决方案就是使用Intent.ACTION_SEARCH
操作和SearchView
中的当前查询发送一个intent来启动可搜索的{只要Activity
的文字发生变化,就会{1}}请记住,这可能不是SearchView
设计方面的最佳做法,但它确实有效。我将在以后重新考虑这种方法,如果我遇到任何新的东西,我会在这里报告。
SearchManager
答案 1 :(得分:1)
TextWatcher应该是您正在寻找的。它还提供在文本更改之前或之后执行代码。
http://developer.android.com/reference/android/text/TextWatcher.html
When an object of a type is attached to an Editable, its methods will be called when the text is changed.
答案 2 :(得分:0)
这是您正在寻找的问题的完美解决方案。
看到这个会对你有所帮助...... Android Action Bar SearchView as Autocomplete?
答案 3 :(得分:0)