我正在尝试找出上一个片段在后栈中的内容,如果它是我想要的那个,则返回到该片段,否则转到另一个片段。我在查找上一个片段的名称/ id时遇到问题。我当前的设置如下:
片段1->片段2->片段3,如果片段3的先前ID是>片段2,则返回带有参数的片段。
但是我也会遇到这种情况:
片段4->片段3在这里,我还希望能够检查片段3的先前ID /名称是否等于片段4,以及是否返回带有参数的那个片段。
基本上,片段3会有不同的路由,我希望能够确定它将去往哪个先前的片段。
我的问题是我无法访问以前的片段中的信息。检查是否有任何可能。我是使用Android导航组件的新手,因此可以提供任何帮助。
如果问题看起来有些混乱,请告诉我,以便在需要时可以重写。
谢谢!
答案 0 :(得分:0)
您可以像这样使用片段的ID /标记来获取片段:
val fragment = supportFragmentManager.findFragmentByTag(tag)
您也可以这样:
private String getCallerFragment(){
FragmentManager fragmentManager = getFragmentManager();
int count = getFragmentManager().getBackStackEntryCount();
return fragmentManager.getBackStackEntryAt(count).getName();
}
如果您想知道哪个片段是后堆栈中的第二个片段,此处Count将给出stacktrace中存在的最新片段。然后使用return fragmentManager.getBackStackEntryAt(count-2).getName()
。这样,您可以找到堆栈跟踪中的任何片段。
答案 1 :(得分:0)
解决此问题的一种方法是将密钥作为前一个片段的参数传递,以便在当前片段中,您将检查传递了什么密钥并根据该密钥采取行动。例如。片段A和片段B都导航到片段C,并且您想基于前面的场景在片段C中执行操作。您可以做的是使片段C接受一个参数“ fragmentOrigin”,然后根据前面的片段将参数设置为“ fragmentA”或“ fragmentB”。这样,您就可以在片段C中检查fragmentOrigin ==片段A; {如果fragmentOrigin ==片段B,则{执行其他操作}