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

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);无法编译。
是否有其他方法传递额外数据以检测搜索来自何处?

1
我正在使用支持库中的SearchView:代码“searchView.setAppSearchData(bundle);”可以编译并正常工作。 - Denis Gladkiy
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非常重要,这样搜索视图就不会执行默认操作。


0
你可以通过在查询中附加查询来发送活动名称。假设您的查询是“hello”,则会将其附加到类似于“mainactivity%%hello”的内容中。在搜索活动中,您可以解析查询以检索活动名称。请注意,此解决方案具有解决方法。可能有更好的解决方案。

我认为在提交查询和启动搜索意图之前修改查询的方法是不存在的。我只能重写 onQueryTextSubmit 并自己实现意图启动。 - Martynas Jurkus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接