我已经阅读了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
?
请解释一下。非常感谢。
答案 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
标记,而该活动将收到搜索意图。