How to resume Fragment from BackStack if exists

前端 未结 6 1078
野的像风
野的像风 2020-11-22 13:29

I am learning how to use fragments. I have three instances of Fragment that are initialized at the top of the class. I am adding the fragment to an activity lik

6条回答
  •  礼貌的吻别
    2020-11-22 14:12

    Step 1: Implement an interface with your activity class

    public class AuthenticatedMainActivity extends Activity implements FragmentManager.OnBackStackChangedListener{
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            .............
            FragmentManager fragmentManager = getFragmentManager();           
            fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit();
        }
    
        private void switchFragment(Fragment fragment){            
          FragmentManager fragmentManager = getFragmentManager();
          fragmentManager.beginTransaction()
            .replace(R.id.frame_container, fragment).addToBackStack("Tag").commit();
        }
    
        @Override
        public void onBackStackChanged() {
        FragmentManager fragmentManager = getFragmentManager();
    
        System.out.println("@Class: SummaryUser : onBackStackChanged " 
                + fragmentManager.getBackStackEntryCount());
    
        int count = fragmentManager.getBackStackEntryCount();
    
        // when a fragment come from another the status will be zero
        if(count == 0){
    
            System.out.println("again loading user data");
    
            // reload the page if user saved the profile data
    
            if(!objPublicDelegate.checkNetworkStatus()){
    
                objPublicDelegate.showAlertDialog("Warning"
                        , "Please check your internet connection");
    
            }else {
    
                objLoadingDialog.show("Refreshing data..."); 
    
                mNetworkMaster.runUserSummaryAsync();
            }
    
            // IMPORTANT: remove the current fragment from stack to avoid new instance
            fragmentManager.removeOnBackStackChangedListener(this);
    
        }// end if
       }       
    }
    

    Step 2: When you call the another fragment add this method:

    String backStateName = this.getClass().getName();
    
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.addOnBackStackChangedListener(this); 
    
    Fragment fragmentGraph = new GraphFragment();
    Bundle bundle = new Bundle();
    bundle.putString("graphTag",  view.getTag().toString());
    fragmentGraph.setArguments(bundle);
    
    fragmentManager.beginTransaction()
    .replace(R.id.content_frame, fragmentGraph)
    .addToBackStack(backStateName)
    .commit();
    

提交回复
热议问题