用于具有多个父级的活动的Android向上导航

ol_*_*_er 38 android android-actionbar

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

应用导航树

后退按钮的标准实现很好.

尝试实现"向上"按钮时,问题就出现了.

我期待的是:

  • 当用户在详细信息5活动上并按向上按钮时,应用程序将转到列表3活动
  • 当用户在详细信息7活动上并按下向上按钮时,应用程序将返回到主页活动

所以从不同的角度来说,我希望在后台堆栈上有这种行为:

app backstack清楚

Android文档(实现祖先导航)建议使用以下代码来处理导航:

Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
Run Code Online (Sandbox Code Playgroud)

但是因为详细活动的父活动在不同的导航路径上有所不同,所以我不知道它实际上是哪一个.所以我不能在Intent中调用它.

有没有办法知道Android后台堆栈中真正的父活动?

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

She*_*tib 22

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

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

public static Stack<Class<?>> parents = new Stack<Class<?>>();
Run Code Online (Sandbox Code Playgroud)

现在,在您的所有父活动(在您的情况下被视为父项的活动-Eg:List和Home)中,您将其添加到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
}
Run Code Online (Sandbox Code Playgroud)

如果要返回Parent活动,可以使用以下内容(根据您的代码):

Intent parentActivityIntent = new Intent(this, parents.pop());
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
Run Code Online (Sandbox Code Playgroud)

我希望是对的(: