在不启动的情况下读取当前片段中的搜索查询 activity

Read search query in current fragment without launching activity

我正在构建一个应用程序,其中包含一个符号 Activity,其中包含一个 ActionBar。 activity 包含一个带有 4 个选项卡的选项卡主机,每个选项卡都可以搜索其他内容,具体取决于显示的选项卡和片段。

根据开发者指南 (https://developer.android.com/training/search/setup.html#add-sv),当用户输入查询后按下搜索按钮时,activity 将启动一个搜索意图,我可以在其中阅读像这样查询:

if (Intent.ACTION_SEARCH.equals(intent.getAction())) 
{
        String query = intent.getStringExtra(SearchManager.QUERY);
        //use the query to search your data somehow
}

但是,我不想重新启动 activity,然后决定哪个片段引发了查询,将选项卡设置为正确的选项卡,构建一个新的片段等等......我想要的要做的只是在用户输入的片段中读取查询本身(我注意到 SearchView class 有一个 getQuery 方法)。

我怎样才能以某种方式实现一个侦听器,在用户完成查询并按下虚拟键盘中的搜索按钮后读取查询而不重新创建 activity?我只想获得对搜索框的引用,并像使用 TextView 一样使用它,阅读它的文本并使用它。

我最终做的是实现 OnQueryTextListener。这个侦听器有 2 个方法:onQueryTextChange,它在每个以文本作为参数的键按下时调用,以及 onQueryTextSubmit,当用户按下搜索按钮时调用。如果你在onQueryTextSubmit中returntrue,那就意味着一切都处理好了,不需要发起一个intent。