返回上一个片段,而不重新创建片段

时间:2018-11-05 12:45:07

标签: android android-fragments fragment

我有一个活动,其中包括一个导航底部,它将打开3个单独的片段:

  • 片段A
  • 片段B
  • 片段C

打开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();
    }

3 个答案:

答案 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;
            }