Android搜索片段

问题:

有人知道教程还是使用Fragment实现标准Android search interface的示例?换句话说,是否可以在片段中使用SearchManager进行标准搜索?

回答:

总之,你不能。有几个原因为什么在Fragment内创建搜索界面是不可能的。

  1. 创建可搜索的界面时,您必须在Android清单中指定默认的“可搜索的活动”。我确定你知道,如果没有父级Activity,则Fragment不可能存在,因此这种分离是不可能的。
  2. 如果你已经想到了#1,我想你问这个问题,希望有一些神奇的“黑客”可以完成这项工作。但是,文件指出,
     

    When the user executes a search in the search dialog or widget, the
    system starts your searchable activity and delivers it the search
    query in an Intent with the ACTION_SEARCH action. Your searchable
    activity retrieves the query from the intent’s QUERY extra, then
    searches your data and presents the results.

    负责提供搜索结果的底层内部系统期望Activity,而不是Fragment;因此,实现完全独立于Activity的搜索界面是不可能的,因为它将需要更改underlying system itself。如果你不相信我,请查看SearchableInfo类的源代码:)。

话虽如此,实现类似于你所描述的东西似乎并不难。例如,您可以考虑实现可搜索活动,以便它接受android.intent.action.SEARCH意图,(而不是立即显示ListView中的结果))会将搜索查询传递给您的Fragment。例如,考虑以下可搜索的活动:

public class SearchableActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) {
          String query = intent.getStringExtra(SearchManager.QUERY);
          doMySearch(query);
        }
    }

    /**
     * Performs a search and passes the results to the container
     * Activity that holds your Fragments.
     */
    public void doMySearch(String query) {
        // TODO: implement this
    }
}

当进行搜索请求时,系统将启动可搜索的活动,执行查询,并将结果传递给一些容器Activity(根据您的doMySearch的实现)。容器活动然后将这些结果传递到包含的可搜索Fragment,其中将显示结果。该实现需要比您可能希望的更多的工作,但我敢肯定,有一些方法可以使其更加模块化,这似乎是最好的,你可以做。
附:如果您使用这种方法,您可能需要特别注意哪些活动被添加/删除到后台。有关如何完成此操作的更多信息,请参阅此post
p.p.s.您也可能完全忘记了标准的搜索界面,只需在Fragment中实现一个简单的搜索,如Raghav’s post below所述

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Android search with Fragments

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

44 − = 37