【发布时间】:2014-11-25 19:14:53
【问题描述】:
我有一个SearchActivity,它在清单中用android:launchMode="singleTop" 定义。
我的SearchActivity 包括一个SearchView 供用户输入查询和一个ViewPager 以显示搜索结果。
我为SearchActivity选择了单顶,因此用户可以在活动中进行大量搜索,然后只需按一次返回按钮即可返回主屏幕。
但是,我刚刚在 Activity 中引入了一个“SmartSearch”按钮,按下该按钮后,将触发自动高级搜索,结果仍显示在 SearchActivity 中。
不过,要求是我需要这些高级搜索结果显示在堆栈上的新活动中 - 即,当用户按下返回时,它们将被带到上一个(标准)结果屏幕,然后必须再次按 Back 才能返回主屏幕。
我已经阅读了this about launch modes 和这个about tasks and back stack,并尝试使用这样的意图启动“高级”SearchActivity...
smartSearchIntent.putExtra(SearchResultsActivity.QUERY_EXTRA_KEYS, selectionArgs);
smartSearchIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
...我也尝试使用Intent.FLAG_ACTIVITY_NEW_TASK作为参数,但是当我在高级搜索结果屏幕上按返回时,它只是直接跳回主屏幕。
一直以来,我在此活动的清单中定义了 android:launchMode="singleTop",因为这是“正常”行为 - 那么是否可以覆盖它,如果可以,如何覆盖?
或者有更好的解决方案吗?
【问题讨论】:
-
是否可以让您的高级搜索成为从您的
SearchActivity扩展的新活动?您必须在清单中将其注册为“标准”。另一个选项是重构,因此SearchActivity是标准的,每次启动SearchActivity时,都设置FLAG_ACTIVITY_SINGLE_TOP标志。 -
第二个选项听起来更吸引人,但不确定如何修改创建第一个
SearchActivity的意图,因为搜索意图由SearchView内部处理... -
DeeV,在尝试导航回栈时,我对第二种方法有一点小问题。我现在已经实施了您的第一种方法,它运行良好并且易于实施。您想提供它作为答案吗?我勾选选择它作为最佳解决方案。
-
我不确定如何使用 SearchView,所以我不知道如何绕过它。我认为实际上不可能覆盖 Manifest 属性,因为系统在实例化活动时会读取这些属性。
-
我们实际上并没有覆盖清单属性 itsrlf,而是覆盖它对活动启动方式的影响。正如我的答案中的链接所示,这并不总是按预期工作,但您的第一个建议解决了我原来/潜在的问题。 :-)