我在使用此导航树在应用上实施向上导航时遇到问题:
后退按钮的标准实现很好。
尝试实施“向上”按钮时,问题就开始了。
我的期望:
所以从不同的角度来说,我希望在后台堆栈上有这种行为:
Android文档(Implementing Ancestral Navigation)建议使用以下代码处理向上导航:
Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
但由于详情活动的父活动在不同的导航路径上有所不同,我不知道它究竟是哪一个。所以我不能在Intent中调用它。
有没有办法知道Android后台堆栈中真正的父活动?
如果没有,有没有办法在此应用中实施正确的向上导航?
答案 0 :(得分:22)
我会坚持我对保罗答案的评论:
想法是遍历最后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();
我希望是对的(:
答案 1 :(得分:2)
这是一个棘手的问题,在我看来,真正显示出在处理“向上按钮”Android的用户体验决策时遇到的困难。因此,对您的问题没有明确的答案。
我有两种可能的解决方案。
<强> 1。模仿后退按钮的行为。
您可以考虑在其各个父母之一中添加额外的意图来启动详细信息。此额外信息将告知那些活动在按下android.R.id.home
时需要启动哪些活动。
这实际上意味着您的应用“回归”其共同的祖先,而不是简单地重新启动 Home 。
实现此功能的另一种方法可能是执行onBackPressed()
而不是使用Intent.FLAG_ACTIVITY_CLEAR_TOP
启动 Home ,但要记住关联的动画与普通动画不同“ “行动。
<强> 2。跳过中间活动并回家。
有些应用将“向上按钮”视为“主页按钮”。您可能需要考虑让它始终使用Intent.FLAG_ACTIVITY_CLEAR_TOP
重新启动 Home 。
答案 2 :(得分:0)
这肯定是一个老帖子,但是当我研究SharedPreferences时,我认为可以将这些信息堆叠在sharedPreferences数据中,并且每次在关闭2个父项之前修改其值。 然后通过阅读它,你应该能够直接了解你的父母,而不必为此建立一个完整的类。