Android向上导航多个父母的活动

在使用此导航树实现应用程序导航时遇到问题:

应用程序导航树

后退button的标准实施是好的。

尝试实现向上button时,问题就开始了。

我期望的是:

  • 当用户在细节5活动 ,并按向上button应用程序转到列表3活动
  • 当用户在细节7活动,并按下向上button应用程序返回到家庭活动

所以用不同的术语,我想在后面的堆栈上有这样的行为:

应用程序后台清除

Android文档( Implementing Ancestral Navigation )build议使用以下代码来处理导航

Intent parentActivityIntent = new Intent(this, MyParentActivity.class); parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(parentActivityIntent); finish(); 

但是因为细节活动的父项活动在不同的导航path上有所不同,所以我不知道它究竟是哪一个。 所以我不能在Intent中调用它。

有没有一种方法来了解Android后端堆栈中真正的父代活动?

如果没有,有没有办法在这个应用程序中实现正确的导航

我会坚持我对保罗的回答的评论:

这个想法是有一个堆栈的最后的Parent活动遍历。 例:

 public static Stack<Class<?>> parents = new Stack<Class<?>>(); 

现在,在你所有的家长活动(被认为是父母的活动 – 例如你的家庭:列表和家庭活动)中,你将这个添加到他们的onCreate

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); parents.push(getClass()); //or better yet parents.push(getIntent()); as @jpardogo pointed //of course change the other codes to make use of the Intent saved. //... rest of your code } 

当你想返回到Parent活动,你可以使用以下(根据你的代码):

 Intent parentActivityIntent = new Intent(this, parents.pop()); parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(parentActivityIntent); finish(); 

我希望是对的(:

这是一个棘手的问题,在我看来,真正显示了应付Android的“上button”的UX决定的困难。 因此,你的问题没有一个明确的答案。

我有两个可能的解决scheme给你。

1.模仿后退button的行为。

你可以考虑增加一个额外的意图,以启动来自其各种父母之一的详细信息 。 这个额外的信息会告诉那些在按下android.R.id.home时他们需要启动的活动。

这实际上意味着你的应用程序“回到”它的共同祖先,而不是简单地重新启动Home

实现这个的另一种方法可能是简单地执行onBackPressed()而不是使用Intent.FLAG_ACTIVITY_CLEAR_TOP启动Home ,但要记住,关联的animation将与正常的“向上”动作不同。

跳过中间活动,回家。

一些应用程序将“上键”视为“主键”。 您可能需要考虑只要始终使用Intent.FLAG_ACTIVITY_CLEAR_TOP重新启动Home

这是一个肯定的旧post,但是当我研究SharedPreferences时,我认为可能会将这些信息堆叠在sharedPreferences数据中,并且每次在下一个父母之前修改它的值。 然后通过阅读,你应该能够直接了解你的父母,而不必为此build立一个全class。