Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I Hold references to fragments within my activity

My app has one MainActivity with three tabs (A, B, C).

Tab A shows FragmentA1. When I click a list entry in this fragment then FragmentA2 is shown (still in tab A). The same applies to the other tabs, some hierarchies go even deeper (FragmentC4).

All the switching and replacing of all the fragments is handled in MainActivity by Listeners. (Edit: I don't define my fragment in XML layouts but in the code only).

My Question is:

Should I hold references to all fragments in MainActivity or should I create them new everytime I need them?

What are the (dis)advantages? Can I reuse fragments by using Alternative 1, instead of recreating them everytime?

Alternative 1:

class MainActivity

  private Fragment fgmtA1;
  private Fragment fgmtA2;
  private Fragment fgmtA3;
  ...
  public onClickItemInA1(int itemId) {
    fgmtA2 = new FragmentA2();
    // put args
    // replace
  }

...
}

Alternative 2:

class MainActivity
...
  public onClickItemInA1(int itemId) {
    FragmentA2 fgmtA2 = new FragmentA2();
    // put args
    // replace
  }  
...
}

Alternative 3:

Maybe the best solution is a completely different approach?

like image 654
A2i_ Avatar asked Jun 13 '14 14:06

A2i_


1 Answers

Should I hold references to all fragments in MainActivity or should I create them new everytime I need them?

It depends... The only two reasons which i can think of are performance and keeping the state of a Fragment.

If you always create a new Fragment the GC will have a lot to do, which could cause some performance issues if you use a lot of bitmaps or huge data. You can reuse a Fragment by holding a reference to it in the Activity or getting the Fragment by tag or id using the methods FragmentManager.findFragmentByTag(String) or FragmentManager.findFragmentById(int). With them you can reuse already created Fragments, which should be done by default.

Furthermore if your Fragments hold some data, you will lose them or you cache it somewhere else to reacreate it if the Fragment is destroyed. While reusing a Fragment you can use onSavedInstanceState() to reacreate your state.

Hence, yes you should reuse a Fragment because it could cause system performance or headaches using anti-patterns to save some data.

like image 86
Steve Benett Avatar answered Nov 15 '22 00:11

Steve Benett