Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La mejor manera de cambiar entre dos fragmentos

Estoy interesado en la mejor manera de tener una sola actividad que cambia entre dos fragmentos.

He leído probablemente 15 postes de desbordamiento de la pila y 5 postes de los blogs en cómo hacer esto, y, mientras que pienso que cobbled junto una solución, no estoy convencido que es el mejor. Por lo tanto, quiero escuchar las opiniones de la gente sobre la manera correcta de manejar esto, especialmente con respecto al ciclo de vida de la actividad de los padres y los fragmentos.

Aquí está la situación en detalle:

  1. Una actividad padre que puede mostrar uno de dos posibles fragmentos.
  2. Los dos fragmentos tienen estado que quisiera persistir a través de una sesión, pero no necesita necesariamente ser persistido entre las sesiones.
  3. Un número de otras actividades, tales que la actividad del padre y los fragmentos podrían conseguir enterrados en la pila trasera y destruidos debido a la memoria baja.
  4. Quiero la capacidad de utilizar el botón de retroceso para moverse entre los fragmentos (Así que lo entiendo, no puedo usar setRetainInstance).

Además de los consejos generales de arquitectura, tengo las siguientes preguntas pendientes:

  1. Si la actividad de los padres se destruye debido a la falta de memoria, ¿cómo puedo garantizar que los estados de ambos fragmentos se conservarán, como por este post: Cuando un fragmento es reemplazado y poner en la pila de atrás (o quitado) se queda en la memoria ? . ¿Sólo necesito un puntero para cada fragmento en la actividad de los padres?
  2. ¿Cuál es la mejor manera para que la actividad de los padres controle el fragmento que está mostrando actualmente?

¡Gracias por adelantado!

  • Uso de ViewPager con fragmentos nativos
  • Android Fragment onCreateView vs. onActivityCreated
  • Patrones de uso de la actividad Transición vs Fragmentos dinámicos
  • La barra de herramientas de AppCompat v7 no funciona
  • Prevenir las recargas de WebView en FragmentPagerAdapter?
  • Ejemplo de servicio de primer plano
  • Creación de un fragmento: constructor vs newInstance ()
  • Acerca de Android Progress Dialog. ¿Evitar?
  • 2 Solutions collect form web for “La mejor manera de cambiar entre dos fragmentos”

    Terminé agregando ambos fragmentos usando el gestor de fragmentos de soporte y luego usando detach / attach para cambiar entre ellos. Pude usar commitAllowingStateLoss () porque conservo el estado de la vista en otra parte, y fijé manualmente el fragmento correcto en onResume ().

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.my_layout, new AFragment(), TAG_A); fragmentTransaction.add(R.id.my_layout, new BFragment(), TAG_B); fragmentTransaction.commit(); } public void onResume() { super.onResume(); if (this.shouldShowA) { switchToA(); } else { switchToB(); } } private void switchToA() { AFragment fragA = (AFragment) getSupportFragmentManager().findFragmentByTag(TAG_A); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.detach(getSupportFragmentManager().findFragmentByTag(TAG_B)); fragmentTransaction.attach(fragA); fragmentTransaction.addToBackStack(null); fragmentTransaction.commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); } 

    Es posible que desee considerar el uso de un ViewPager en su actividad principal para que pueda cambiar entre los fragmentos.

    Así que usted sería capaz de pasar a través de ellos.

    Si desea persistir su estado durante una sesión, incluso si la actividad de los padres se destruye, es necesario que sean Parcelable , por lo que puede guardar el estado incluso si la clase no se instancia en ese momento. También tiene que hacer esto si gira el dispositivo y desea mantener la situación actual / datos en la pantalla.

    Debe escribirlas en un Parcelable en sus métodos onPause y volver a onResume en el onResume one. De esta manera no importa si se destruyen o tienen que ser recreados debido a los cambios en la orientación de los dispositivos.

    Si quieres poder cambiar entre esos fragmentos con el Backbutton, puedes coger el buttonClick para onBackPressed y manejarlo en consecuencia.

    Si necesitas averiguar qué Fragmento tu visualización en un momento dado le preguntas a tu ViewPager qué Fragmento está mostrando en ese momento, para que no tengas que seguir la pista, puedes preguntar a alguien que sabe, si necesitas saber eso.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.