与向上和向后按钮的差异

时间:2016-08-06 06:56:52

标签: android

在Android应用程序中,我有活动A,B和C.

在初始流程中,我让用户看到活动A,触摸按钮会导致活动B.触摸按钮会导致活动C.

打开应用程序的另一种方法是双击壁纸(应用程序是壁纸BTW)。这为A添加了一个额外的意图,在活动创建期间读取。在显示A之前,它使用startActivities准备并启动B和C.

当触发替代流程时,我可以成功看到C,然后按下将我引导到B.再次按下将我引导到A.这是用户视角下的预期行为,这就是我想要的发生。但是,如果不是按UP,我使用后退按钮去C - > B - > A,在显示A之前触发逻辑并且B - > C再次重新开放。

根据我的代码,我希望看到当我按下时看到的东西,这是不可取的,但可以理解。

a)为什么在这种情况下向上按钮的行为与背面不同?

b)最简单的方法是知道我是从应用程序外部到达A还是向后或向上按下,所以我可以使用一种略有不同的逻辑?

BTW所有3个活动都有自己的碎片,项目使用匕首和刀。

编辑:我也注意到,如果我在C上,我再按两次,我又在A(没有按钮),但如果我按回去,我会再次看到A ,好像我的堆栈有2个A副本。预期的行为将是离开应用程序。这与android:launchMode

有关

2 个答案:

答案 0 :(得分:0)

如果您已在清单文件中将其定义为以下 -

,则UP按钮将引导您进入父活动
</activity>
        <activity
        android:name=".SecondActivity"
        android:label="@string/title_activity_second"
        android:parentActivityName=".FirstActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.android.home.app.FirstActivity" />
    </activity>

否则它会像正常的反压一样,这意味着它只会完成当前的活动。

对于您的情况,当您从B移动到C时,检查您是否正在完成活动B.因为如果您在背面按下时获得活动A,那么堆叠中只有一个活动A.活动B被定义为C的父活动,活动A被定义为B的父活动,这就是你按下UP按钮时获得活动A的原因。

答案 1 :(得分:-1)

在修改启动模式之后,这就是我最终的工作:

  • android:launchMode="singleTop"声明A,B和C使得后退和向上按钮的行为方式相同(注意B需要始终保持其意图)
  • 当A启动并检测到额外内容时,它将为A创建一个新的意图而没有额外内容和setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK)。这将使堆栈包含一个新的A副本,不会重定向到B或C

请注意,这是好的,因为A不需要为自己的视图添加任何额外内容。如果是这种情况,我必须将专门的额外内容传递给我的新A意图,以避免在第一次打开或从C返回时出现歧义。

根据这个帖子,改变singleTop活动意图的情况似乎没有一个干净的答案:How to properly clear intent data from singleTop Activity?