How to save and reuse same instance of fragments?

前端 未结 2 1367
攒了一身酷
攒了一身酷 2021-01-04 02:45

I have recently started using fragments have created a demo app which looks like this:

\"Demo

C

相关标签:
2条回答
  • 2021-01-04 03:29

    To demonstrate a FragmentTransaction, the following sample might be helpful to you.

    First, you want to do all your initialization stuff in the onCreate() of your activity, which you have right, but we'll make a few changes.

    public class MainActivity extends Activity implements View.OnClickListener {
    
    private Button btnOne;
    private Button btnTwo;
    private Button btnThree;
    
    /* Called when the activity is first created.*/
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        initialize();
        if(findViewById(R.id.fl) != null)
        {
            if(savedInstanceState != null)
            {
                FragmentTransaction trans = getFragmentManager().beginTransaction();
    
                //This is where we add our first fragment
                trans.add(R.id.fl, new FragmentOne());
                trans.commit();
            }
        }
    }
    
    private void initialize()
    {
        btnOne = (Button) findViewById(R.id.button1);
        btnTwo = (Button) findViewById(R.id.button2);
        btnThree = (Button) findViewById(R.id.button3);
        btnOne.setOnClickListener(this);
        btnTwo.setOnClickListener(this);
        btnThree.setOnClickListener(this);
    }
    
    public void onClick(View view)
    {
        //Here is where we'll actually transfer the fragments
    
        FragmentTransaction trans = getFragmentManager().beginTransaction();
        switch(v.getId()){
            case R.id.button1:
                trans.replace(R.id.fl, new FragmentOne());
                trans.addToBackStack(null);
                trans.commit();
                break;
            case R.id.button2:
                trans.replace(R.id.fl, new FragmentTwo());
                trans.addToBackStack(null);
                trans.commit();
                break;
            case R.id.button3:
                trans.replace(R.id.fl, new FragmentThree());
                trans.addToBackStack(null);
                trans.commit();
                break;
        }
    }
    

    This will allow you to easily transition from one Fragment to the next.

    0 讨论(0)
  • 2021-01-04 03:32

    The FragmentManager does it's own memory management. It will kill/recreate or keep in memory your instances according to its logic. You can ensure your fragment's state is save using onSaveInstanceState()

    Or you can for force the system to keep your instance alive using setRetainInstance(true) on your Fragment.

    This is how you create a transaction.

        FragmentTransaction fragmentTransaction = context.getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.layout, new MyFragment(), f.getClass().getName());
        fragmentTransaction.commit();
    
    0 讨论(0)
提交回复
热议问题