Android,多个可搜索的活动?

Pse*_*nce 5 android android-activity android-actionbar searchview

如何制作两个不同的可搜索活动?

我在我的应用程序的不同部分有不同的搜索逻辑(我正在搜索什么以及我如何显示结果)。

例如,在某些活动中,我希望在我的在线数据库中查询 A 类对象,而在另一个活动中,我希望在我的在线数据库中查询 B 类对象。

我目前按照指南进行了可搜索的活动设置:http : //developer.android.com/guide/topics/search/search-dialog.html,并且非常适合搜索 A 类对象。但是,我不能t 弄清楚如何制作具有不同布局和查询逻辑的第二个可搜索活动。您似乎只能将可搜索元数据应用于一项活动?

一定有办法做到这一点,对吧?

Sag*_*hod 0

是的,有一种方法可以做到。

如果您希望应用程序中只有一个默认搜索活动,而其他多个活动向其发送搜索查询,则可以在特定活动中创建搜索视图时提供应用程序搜索元数据,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();

    menuInflater.inflate(R.menu.search_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =
            (SearchView) menu.findItem(R.id.search).getActionView();
    SearchView searchView =
            (SearchView) menu.findItem(R.id.search).getActionView();

    Bundle bundle = new Bundle();
    bundle.putString("Search Type", "local search");
    bundle.putString("Other metadata", "metadata");

    searchView.setAppSearchData(bundle);
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));
}
Run Code Online (Sandbox Code Playgroud)

然后在默认搜索活动中获取应用程序搜索元数据,如下所示:

        mSearchQuery = intent.getStringExtra(SearchManager.QUERY);
        Bundle bundle = intent.getBundleExtra(SearchManager.APP_DATA);

        // Get the type of search to perform
        mSearchType = bundle.getString("Search Type");
Run Code Online (Sandbox Code Playgroud)