3

我已经这样定义SearchView

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater)
    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    SearchableInfo info = searchManager.getSearchableInfo(getActivity().getComponentName());

    SearchView searchView = (SearchView) menu.findItem(R.id.action_menu_search).getActionView();
    searchView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    searchView.setSearchableInfo(info);
}

一切正常。当我提交查询时,新意图被触发,我将其捕获在我的MainActivity. 但我不知道搜索查询来自哪里。

我可以看到mAppSearchData可以帮助我的变量android.widget.SearchView,但由于某种原因它无法访问 - 代码searchView.setAppSearchData(bundle);无法编译。

有没有其他方法可以传递额外的数据来检测搜索的来源?

4

2 回答 2

1

您可以实现自己的 OnQueryTextListener 例如:

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            Intent intent = new Intent(getApplicationContext(), MyActivity.class);
            intent.putExtra(MyActivity.IMPORTANT_NUMBER, importantNumber);
            intent.putExtra(SearchManager.QUERY, s);
            intent.setAction(Intent.ACTION_SEARCH);
            startActivity(intent);
            return true;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            return false;
        }
    });

更多详情:https ://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/SearchView.java

在 onQueryTextSubmit 中返回 true 很重要,因此 searchView 不会执行默认操作。

于 2018-05-06T10:41:54.287 回答
0

您可以通过附加查询将活动名称与查询一起发送。假设您的查询是“hello”,您会将其附加到类似“mainactivity%%hello”的内容中。然后,在您的搜索活动中,您可以解析查询以检索活动名称。考虑这个解决方案有一个解决方法。那里可能有更好的东西。

于 2014-01-14T14:45:27.107 回答