在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
?有关
答案 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需要始终保持其意图)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?