我有一个活动,其中包括一个导航底部,它将打开3个单独的片段:
打开Fragment A
时,如果我按返回按钮,则单击一个按钮现在可以打开另一个片段(片段G),我将返回到Fragment A
。但是此片段(A)被重新创建。我想回到相同的状态,而不是重新创建片段。
这是我在MainActivity
中的代码:
private void loadFragment (Fragment fragment){
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frame_container, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}
}
@Override
public void onBackPressed(){
if (getSupportFragmentManager().getBackStackEntryCount() == 1){
finish();
}
else {
super.onBackPressed();
}
}
这是我在片段A中打开片段G的代码
private void loadFragment() {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
Fragment fragment;
fragment = new PdfFragment();
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
答案 0 :(得分:0)
如果您全局声明所有Fragment
实例,则有可能。致电fragment
中的所有activity
。
例如:-适用于
activity
。
private Fragment fragmentA = new FragmentA();
private Fragment fragmentB = new FragmentB();
private Fragment fragmentC = new FragmentC();
public void callFragment1() {
fragmentManager.beginTransaction().replace(R.id.layout, fragmentA).addToBackStack(null).commit();
}
例如:-适用于
fragment
。
MyActivity activity = ((MyActivity)getActivity());
activity.callFragment1();
其他
fragments
的依此类推。
希望您的问题得到解决。
答案 1 :(得分:0)
首先,您知道片段的标签。 假设您有两个片段
- FragmentA.java
- FragmentB.java
您要从B片段返回到A片段,然后必须添加
fragmentTransaction.addToBackStack("FragmentA");
现在我认为这会起作用。
答案 2 :(得分:0)
在您的片段中,只需将此代码添加到OnCreateView
if (view != null){
if((ViewGroup)view.getParent() != null)
((ViewGroup) view.getParent()).removeView(view);
return view;
}