【问题标题】:How to override android:launchMode="singleTop"?如何覆盖 android:launchMode="singleTop"?
【发布时间】: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,而是覆盖它对活动启动方式的影响。正如我的答案中的链接所示,这并不总是按预期工作,但您的第一个建议解决了我原来/潜在的问题。 :-)

标签: android android-intent


【解决方案1】:

我为此制定了解决方案/解决方法。刚刚为有相关问题的人发布了我的答案,在这里 - https://stackoverflow.com/a/27125107/1617737

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2012-12-17
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多