如何向android.widget.SearchView添加额外的数据?

时间:2014-01-14 14:31:54

标签: android android-searchmanager android-search

我已经定义了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);无法编译。

是否有其他方法可以传递其他数据来检测搜索的来源?

2 个答案:

答案 0 :(得分:0)

您可以通过附加查询来发送包含查询的活动名称。让我们说你的查询是“你好”,你可以将它附加到像“mainactivity %% hello'”这样的东西上。在搜索活动中,您可以解析查询以检索活动名称。考虑此解决方案有一个解决方法。可能还有更好的东西。

答案 1 :(得分:0)

您可以实现自己的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不会执行默认操作。