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.
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 } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With