如何在Android中将Fragment添加到返回堆栈

4

我创建了一个应用程序,使用Sherlock Fragment创建了五个屏幕。

我可以从一个屏幕跳转到任何其他屏幕。

但是我想将最后访问的片段名称保存到后退堆栈中,以便从当前片段返回到父片段(从哪里来)。

我尝试了这段代码:

    FragmentManager fragManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragTransacion = fragManager.beginTransaction();

    FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount());
    String str=backEntry.getName();
    fragTransacion.addToBackStack(str);

但是我的程序不幸停止,并告诉我发生了空指针异常

我该如何解决这个问题?

这是我的日志记录, logcat


请发布您的日志记录(logcat)。 - nikis
在 AboutUs.java 的第 44 行有什么? - TheLittleNaruto
3个回答

3
您可以像这样做。
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content, fragment);
transaction.addToBackStack("");
transaction.commit();

这对我帮助很大,谢谢! - Burak

0

在编程中,应该尽可能使用getSupportFragmentManager()代替getFragmentManager()

进行替换操作

   FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount());

使用

   FragmentManager.BackStackEntry backEntry=getSupportFragmentManager().getBackStackEntryAt(getActivity().getSupportFragmentManager().getBackStackEntryCount());

在添加到回退栈之前,您还需要执行一些事务

FragmentManager fragManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragTransacion = fragManager.beginTransaction();

    FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount());
    String str=backEntry.getName();
fragTransacion.add(R.id.content_frame, detailFrag);
    fragTransacion.addToBackStack(str);

fragTransacion.commit();

另外,您应该使用 count -1,获取计数索引处的项目可能会导致 ArrayIndexOutOfBounds


“fragTransaction.add(R.id.content_frame, detailFrag)” 的作用是什么? - Jigar Shekh
任何交易都是一个例子。首先尝试解决我提到的其他错误。 - vipul mittal

0

你遇到了NullPoinerException,因为你在片段没有初始化时尝试获取backEntry(在添加片段后需要等待直至其被加载)。此外,您需要先将片段附加到活动中fragTransacion.replace(R.id.yoursLayout,new YoursFragment);,然后再添加到回退栈

而不是:

 FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount());
        String str=backEntry.getName();
fragTransacion.addToBackStack(str);

请使用以下代码:
fragTransacion.addToBackStack(null);

但是我该如何使用“fragTransacion.replace(R.id.yoursLayout,new YoursFragment)”,因为我的目标片段不固定。 - Jigar Shekh
在添加目标片段后,只需添加fragTransacion.addToBackStack(null);即可。 - dooplaye

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