如何在Android中将片段添加到后台堆栈

时间:2014-03-05 12:13:43

标签: android android-fragments back-stack

我使用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);

但不幸的是我的程序停止并且告诉我那里的NullPointerException

我怎样才能实现这个目标?

这是我的log-cat, logcat

3 个答案:

答案 0 :(得分:0)

每次使用getSupportFragmentManager()代替getFragmentManager()

替换

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

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

此外,您需要在添加到Backstack之前执行一些事务

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

答案 1 :(得分:0)

你可以这样做

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content, fragment);
transaction.addToBackStack("");
transaction.commit();

答案 2 :(得分:0)

你得到NullPoinerException,因为你试图在片段未初始化时尝试返回(在添加片段之后需要等到它被加载。你需要先将片段附加到活动fragTransacion.replace(R.id.yoursLayout,new YoursFragment);而不是添加到backstack 相反:

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

使用此:

fragTransacion.addToBackStack(null);