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