Android: Is it better to create a new fragment every time a navigation drawer item is clicked, or load up previously created fragments? -


i implementing standard navigation drawer pattern android, 10 fragments user can navigate drawer. currently, creating new fragment every time different navigation drawer item clicked so:

// when new navigation item @ index clicked  fragmenttransaction ft = fragmentmanager.begintransaction(); ft.settransition(fragmenttransaction.transit_fragment_fade); fragment newfragment = null; if (index == 0)     fragment = new fragment0(); ... ft.replace(r.id.container, newfragment); ft.commit(); 

i have been wondering if more efficient following:

// somewhere in oncreate fragment[] fragments = new fragment[n]; fragments[0] = new fragment0(); fragments[1] = new fragment1(); ...  // when new navigation item (at index) clicked  fragmenttransaction ft = fragmentmanager.begintransaction(); ft.settransition(fragmenttransaction.transit_fragment_fade); ft.replace(r.id.container, fragments[index]); ft.commit(); 

my main worry of fragments hold significant amount of data (fairly large lists , lots of views). there issue holding these fragments in memory , provide advantage on instantiating new fragments every time (apart faster switches between fragments)? there accepted 'better' solution?

i had similar issue. took approach similar yours, , save load on processor made following tweak every call create instance fragment object: (in context use in selectitem method)

switch (position) {     case 0:         if (fragmentone == null)             fragmentone = new fragmentone();         getsupportfragmentmanager().begintransaction().......         break;     case 1:         if (fragmenttwo == null)             fragmenttwo = new fragmenttwo();         getsupportfragmentmanager()...... 

fragmentone , fragmenttwo 2 different fragment classes , fragmentone , fragmenttwo objects declared fields in mainactivity

edit:

i add how follow similar approach array holding fragments. instead of creating new fragments in oncreate, when item clicked. in oncreate, send call drawer select fragment want selected default on launch.

//somewhere in oncreate if (savedinstancestate == null) {     selectitem(defaultfragment); } else     selectitem(selectedfragment); //selectitem method called draweritemclicklistener   //in selectitem: when navigation item @ index clicked, listener calls switch (index) {     case 0:         if (fragments == null) {             fragments = new fragment[n];             fragment[0] = new fragment0();         }         else if (fragments[0] == null) {             fragments[0] = new fragment0();         }         break;     .... } fragmenttransaction ft = fragmentmanager.begintransaction(); ... ft.replace(r.id.container, fragments[index]); ft.commit(); 

no need instantiate fragments on oncreate since makes startup slow. create them , when needed , afterwards use same 1 if exists. new fragments created if being loaded first time.