Android澄清中的搜索栏

时间:2015-06-28 11:57:00

标签: android search

我已经阅读了Android官方网站,但仍然感到困惑。我可以问一下可搜索的活动和可搜索界面两种不同的活动吗?我的理解是你对可搜索的接口活动的新意图,然后将查询传递给可搜索的活动。可搜索的活动完成搜索并通过另一个意图将适配器(在通常情况下)返回到可搜索的接口活动?

这是对的吗?

从网站上有这个片段:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the options menu from XML
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    // Get the SearchView and set the searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    // Assumes current activity is the searchable activity
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default

    return true;
}

不应该是可搜索的界面活动吗?但为什么有两行以上的评论:

// Assumes current activity is the searchable activity
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default

// Assumes current activity is the searchable activity

请解释一下。非常感谢。

1 个答案:

答案 0 :(得分:0)

“假设当前活动是可搜索的活动”行是指getComponentName()表达式(当从其中调用时返回当前活动的组件名称)。

  

我可以问一下可搜索活动和可搜索界面两种不同的活动吗?

你可以做任何一种方式。

搜索通常发生在已经显示的内容中,因此可以方便地在包含SearchView的同一个Activity中对结果过滤进行编码。每次用户搜索时,都会创建并启动相同Activity的新实例,并且可以通过按BACK返回上一个实例。不用说,有问题的活动必须有合适的launchMode(例如默认的“标准”)才能使用。

如果您将另一个Activity的ComponentName传递给getSearchableInfo,请执行以下操作:

ComponentName searchResultActivity = new ComponentName(getPackageName(), ViewerActivity.class.getName());
searchView.setSearchableInfo(searchManager.getSearchableInfo(searchResultActivity));

然后将使用<meta-data>中的ViewerActivity标记,而该活动将收到搜索意图。