Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,多个可搜索的活动?_Android_Android Activity_Android Actionbar_Searchview - Fatal编程技术网

Android,多个可搜索的活动?

Android,多个可搜索的活动?,android,android-activity,android-actionbar,searchview,Android,Android Activity,Android Actionbar,Searchview,如何进行两种不同的可搜索活动 我在我的应用程序的不同部分有不同的搜索逻辑(搜索内容和显示结果的方式) 例如,在某些活动中,我希望查询联机数据库中的A类对象,在另一个活动中,我希望查询联机数据库中的B类对象 我目前有一个可搜索的活动设置,按照指南: ,非常适合搜索A类对象。但是,我不知道如何创建具有不同布局和查询逻辑的第二个可搜索活动。您似乎只能将可搜索元数据应用于一个活动 一定有办法,对吧?是的,有办法 如果您希望应用程序中只有一个默认搜索活动,而其他多个活动向其发送搜索查询,则可以在特定活动中

如何进行两种不同的可搜索活动

我在我的应用程序的不同部分有不同的搜索逻辑(搜索内容和显示结果的方式)

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

我目前有一个可搜索的活动设置,按照指南: ,非常适合搜索A类对象。但是,我不知道如何创建具有不同布局和查询逻辑的第二个可搜索活动。您似乎只能将可搜索元数据应用于一个活动


一定有办法,对吧?

是的,有办法

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

@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()));
}
        mSearchQuery = intent.getStringExtra(SearchManager.QUERY);
        Bundle bundle = intent.getBundleExtra(SearchManager.APP_DATA);

        // Get the type of search to perform
        mSearchType = bundle.getString("Search Type");
然后在默认搜索活动中获取应用程序搜索元数据,如下所示:

@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()));
}
        mSearchQuery = intent.getStringExtra(SearchManager.QUERY);
        Bundle bundle = intent.getBundleExtra(SearchManager.APP_DATA);

        // Get the type of search to perform
        mSearchType = bundle.getString("Search Type");

在要从中搜索的每个活动中,覆盖选项菜单,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the options menu
    getMenuInflater().inflate(R.menu.activity_search_menu, menu);

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

    if (searchManager != null) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    }
    return true;
}

// Override onOptionsItemSelected and onSearchRequested() adds additional data to intent
// If you have several activities that use the SearchableActivity, override these methods to
// add contextual data. You can even modify the searchEvent by using the constructor -
// onSearchRequested(SearchEvent se))
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}
@Override
public boolean onSearchRequested() {
    Bundle b = new Bundle();
    b.putString(SearchableActivity.TAG, MainActivity.TAG);
    startSearch(null, false, b, false);
    return true;
}
这里记录了这一点:
以上就是一个有效的例子。当然,这假设您已经正确地设置了所有其他内容。希望这能有所帮助。

setAppSearchData不是支持SearchView或framework的SearchView的公共方法。它使用@RestrictTo(LIBRARY_GROUP)注释,没有文档记录。是否有一种记录在案的方法来做类似的事情?