Fragmento como singleton en Android
Pregunta general ¿Puedo definir Fragmentos como Singletons?
Pregunta específica En mi aplicación tengo una 'FragmentActivity' con un FragmentPager
que tiene dos fragmentos, FragmentA
y FragmentB
.
- Cómo simular un evento de arrastre en un ViewPager en Roboeléctrico?
- FragmentPagerAdapter getItem no está siendo activado
- Establecer currentItem de un viewPager de un fragmento
- Controla las direcciones en las que se puede desplazar el ViewPager de forma dinámica con la información de la interfaz de usuario
- Cómo limitar los cambios de página de ViewPager a uno por gesto
Definí los fragmentos como Singletons en el FragmentA
extiende la clase Fragment
:
private static instance = null; public static FragmentA getInstance() { if (instance == null) { instance = new FragmentA(); } return instance; } private FragmentA() {}
Y en mi 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; }
Y así es como hincho el diseño de los fragmentos:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentView = (RelativeLayout) inflater.inflate(R.layout.fragment_a_layout, container, false); return fragmentView; }
Mi problema:
Cuando inicio mi aplicación, todo funciona bien. Cuando cierro mi aplicación y luego la vuelvo a iniciar, no veo ambos fragmentos.
- Recuperar un fragmento de un ViewPager
- SlidingMenu y ViewPager con API13 (Honeycomb)
- Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura
- ViewPager en blanco en la parte posterior de otro fragmento
- Calendario y PagerAdapter - Vistas ilimitadas
- Fragmento en ViewPager utilizando FragmentPagerAdapter está en blanco la segunda vez que se ve
- Ocultar barra Tablayout en android
- ViewPager dentro de ListView
Los fragmentos están destinados a ser componentes reutilizables de las aplicaciones. No deberías usarlos como singletons, sino que deberías implementar Fragment.SavedState o 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 } }
- StartService de la clase que no extiende Actividad
- ¿Cómo crear una aplicación para Android de "sigilo"?