【问题标题】:Going back few activities without destroying the bottom one在不破坏底部活动的情况下返回一些活动
【发布时间】:2019-04-20 07:48:34
【问题描述】:

我做了一个包含 3 个活动的简单示例:

  1. ActivityA

  2. ActivityB

  3. ActivityC

每个按钮上只有一个按钮。

  • ActivityA 上的按钮打开 ActivityB

        val intent = Intent(this, ActivityB::class.java)
        startActivity(intent)
    
  • ActivityB 上的按钮打开 ActivityC

        val intent = Intent(this, ActivityC::class.java)
        startActivity(intent)
    
  • ActivityC 上的按钮应该回到ActivityA,但在此过程中杀死了 ActivityB

        val intent = Intent(this, ActivityA::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
        startActivity(intent)
    

它做我想做的事,整个流程在登录时看起来像这样:

ActivityA onCreate()
ActivityA button clicked
ActivityB onCreate()
ActivityB button clicked
ActivityC onCreate()
ActivityC button clicked
ActivityB onDestroy()
ActivityA onDestroy()
ActivityA onCreate()
ActivityC onDestroy()

这个解决方案的问题在于ActivityA 被重新创建(销毁并创建)。 有没有办法只恢复它?

免责声明: 这当然只是一个简化的案例。由于我的应用程序中的几个原因,我宁愿避免在点击方法上使用onActivityResult()finish()。我需要保留正确的后退按钮行为。

【问题讨论】:

  • 当B去C时使用finish();当 C 去 A 使用 finish();调用 Intent 后
  • 我不能这样做有很多原因。这只是简化案例
  • 你能告诉我任何一个原因吗?
  • @AbhinavGupta 简单 - 我不想在每个案例中都杀死每一个活动。有一些特殊情况我需要这样回去。您的解决方案完全阻止了后退/向上按钮的行为。
  • 在清单的活动标签中使用 android:launchMode="singletask"

标签: android android-intent android-activity kotlin android-lifecycle


【解决方案1】:

你做的几乎是正确的。您缺少的(以避免重新创建活动)是 FLAG_ACTIVITY_SINGLE_TOP 标志。

val intent = Intent(this, ActivityA::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)

更多信息here

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多