从BackStack中获取片段

3

从返回堆栈中几乎无法获取片段,甚至开始考虑将其保留在单例中,这可能是不好的。 像这样保存到返回堆栈中,每次尝试按标签或其他方式获取它都会出现错误。

Fragment fragment = UserProfileFragment.newInstance(null);
                        FragmentTransaction trans = getFragmentManager().beginTransaction();
                        trans.replace(FRAGMENT_PLACE_RESOURCES, fragment);
                        trans.addToBackStack("profile");
                        trans.commit();

在这里,它只返回了 null,所以我无法使用此片段。没有日志。

Fragment fragment2 = getFragmentManager().findFragmentByTag("profile");

请发布您收到的错误(完整的堆栈跟踪和/或日志记录)。 - Sebastian
添加了代码,可能我没有正确地添加标签? - Kirill Zotov
Sebastian,感谢你的帮助。 - Kirill Zotov
你是否在将片段添加到回溯中后立即检查它?(如果没有,请尝试这样做,以便立即查看是否已添加)您是否在调用saveInstanceState后遇到无法提交事务的异常? - Sebastian
1个回答

4

getFragmentManager().findFragmentByTag("tag")

只有在添加了一个带有特定标签的fragment时才会使用,例如:

fragmentTransaction.add(R.id.order_container,mProfileFragment,"profile");

或者

fragmentTransaction.replace(R.id.order_container,mProfileFragment,"sometag");

然后您就可以通过标签找到这个fragment。 对于您的情况,您正在将事务添加到回退栈中,因此您将无法通过标签找到该片段。您只是将事务添加到回退栈中,而不是一个片段。您的片段也已从活动中删除并销毁,因此您必须通过弹出回退栈来恢复事务,而不是通过查找该片段来找到它。 您需要调用

getFragmentManager().popBackStack("profile");

来将该片段取回到活动中,并使其在屏幕上可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接