Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fragment as a singleton in Android

Tags:

General Question Can I define Fragments as Singletons?

Specific question In my application I have one 'FragmentActivity' with a FragmentPager which has two Fragments, FragmentA and FragmentB.

I defined the fragments as Singletons in the FragmentA extends Fragment class:

private static instance = null;  public static FragmentA getInstance() {     if (instance == null) {         instance = new FragmentA();     }        return instance; } private FragmentA() {} 

and in my FragmentPagerAdapter :

@Override public Fragment getItem(int position) {     switch(position){     Fragment fragment = null;     case 0:         fragment = FragmentA.getInstance();          break;     case 1:         fragment = FragmentB.getInstance();          break;     }     return fragment; } 

and this is how I inflate the fragments layout:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {     fragmentView = (RelativeLayout) inflater.inflate(R.layout.fragment_a_layout, container, false);     return fragmentView; } 

My Problem:

When I first launch my app everything works well. When I close my app and then restart it, I'm not seeing both of the fragments.

like image 479
Daniel L. Avatar asked Feb 12 '13 18:02

Daniel L.


1 Answers

Fragments are meant to be reusable components of applications. You should not be using them as singletons, instead you should implement Fragment.SavedState or onSavedInstanceState.

public class YourFragment extends Fragment {     // Blah blah blah you have a lot of other code in this fragment     // but here is how to save state     @Override     public void onSaveInstanceState(Bundle outState) {         super.onSaveInstanceState(outState);         outState.putInt("curChoice", mCurCheckPosition);     }     @Override     public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {         // savedInstanceState will have whatever you left in the outState bundle above     } } 
like image 88
hwrdprkns Avatar answered Sep 29 '22 21:09

hwrdprkns