【问题标题】:How to add extra data to android.widget.SearchView?如何向 android.widget.SearchView 添加额外数据?
【发布时间】:2014-01-14 14:31:53
【问题描述】:

我已经这样定义了我的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 中捕获它。但我不知道搜索查询来自哪里。

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

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

【问题讨论】:

  • 我正在使用支持库中的 SearchView:代码“searchView.setAppSearchData(bundle);”编译和工作。

标签: android android-searchmanager android-search


【解决方案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 不会执行默认操作。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我认为没有办法在提交之后和启动搜索意图之前修改查询。我只能覆盖onQueryTextSubmit 并自己实现意图启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多