Generalidades

Fragmentos de Android: problemas y errores comunes.Original… | Por Wisemuji | Marzo 2022

original: https://levelup.gitconnected.com/android-fragments-common-queries-and-mistakes-915b4a1f34ce

Este artículo es una traducción/resumen del artículo anterior, todos los derechos de autor pertenecen al autor original amod kanthe.

Fragmentos de Android problemas y errores comunesOriginal Por Wisemuji

La clase Fragment de Android se usa para crear interfaces de usuario dinámicas y debe usarse en Activity. La mayor ventaja de usar Fragmentos es que simplifican la tarea de crear interfaces de usuario para varios tamaños de pantalla. (Una Actividad puede contener cualquier número de Fragmentos)

en el texto Errores comunes y problemas encontrados al usar Fragmentosexplicar

getSupportFragmentManagerSe utiliza principalmente para la actividad. Necesario para usar ViewPager, BottomSheetFragment y DialogFragment en una actividad.

getChildFragmentManagerSe usa cuando se usa ViewPager dentro de Fragment.

en el fragmentogetSupportFragmentManagerLos problemas más importantes en el proceso de uso pérdida de memoriaSi. Pila de fragmentos utilizada en ViewPager getSupportFragmentManagerDespués de su uso, acumular en Actividad.cerrar fragmento principal ‘cierre’ Pero dado que todos los fragmentos secundarios están activos y se mantienen en la memoria ‘destruir’No sucede que todos estos fragmentos pierdan memoria porque no solo el fragmento principal sino todos los fragmentos secundarios no se pueden borrar de la memoria del montón.

así en el fragmento getSupportFragmentManagerNo utilice

Cuando usa DialogFragment, ChildFragment, BottomSheetFragment, a veces necesita pasar algo al fragmento principal. La mejor manera es crear una devolución de llamada.

Simplemente agregue el código anterior al Fragmento secundario. También se puede usar en Fragmentos secundarios en ViewPager.

FragmentPagerAdapterAlmacene todo el Fragmento en la memoria, por lo que si ViewPager usa muchos Fragmentos, sobrecarga de memoriapuede causar FragmentStatePagerAdapterSolo guarde fragmentos en SavedInstanceState y destruya todos los fragmentos cuando pierdan el foco.

entonces, Cuando se usan más de 3 fragmentos FragmentStatePagerAdapterescribir y en otros casos FragmentPagerAdapterescribir

Echemos un vistazo a algunos problemas comunes que puede encontrar.

ViewPager Fragment es administrado por FragmentManager en Fragment o Activity, y todas las instancias de ViewPager Fragment se almacenan en FragmentManager.

Por lo tanto, si ViewPager no se actualiza, podría ser un problema que FragmentManager todavía tenga la instancia anterior de Fragment.en momentos como este notifyDataSetChanged Las funciones son útiles.

Proporcionado por FragmentStateAdapter y FragmentPagerAdaptersetPrimaryItem()Se recomienda configurar el Fragmento actual usando una función llamada (ejemplo)

replaceElimine los fragmentos existentes y agregue otros nuevos. Es decir, cuando se presiona el botón Atrás, el Fragmento reemplazado se creará usando onCreateView.

addMantenga el Fragmento existente y agregue un Fragmento nuevo. Es decir, el fragmento existente no entra en estado de pausa, sino en estado activo.

Cuando el Fragmento actual ya no es necesarioreplacePuede usar adicionalmente si su aplicación tiene límite de memoria replace en lugar de addConsidere usar

Al usar el receptor en Fragmento liberar el receptorEn algunos casos, pueden ocurrir pérdidas de memoria por olvido. Si se registró en onCreate o onResume, debe liberarse en onPause o onDestroy.

Además, si varios fragmentos reciben el mismo receptor de transmisión, Tienes que registrarlo en onResume y liberarlo en onPause. Hacer. Si lo libera en onCreate o onDestroy, otros Fragmentos no lo recibirán hasta que se libere el Fragmento.

Al usar BottomBarNavigation y NavigationDrawer, a menudo se ve que se regenera un Fragmento o que se agrega el mismo Fragmento varias veces.

En este caso, incluso FragmentTransaction show, hidedebe usarse (en lugar de agregar, reemplazar)

(una biblioteca con buenos ejemplos)

Si intenta enviar el fragmento, la aplicación se bloqueará incluso si la actividad no está en estado reanudado. Para evitar esta situación, independientemente de si la actividad o el fragmento se encuentran en estado de reanudación, isAdded() o isResumed()deberia ver si hay

Si no te importa mucho el estado del fragmento commitAllowingStateLoss()puedes usarlo

Cuando use el menú de opciones dentro de un Fragmento, agregue la siguiente línea.

Si está utilizando una barra de herramientas en un Fragmento, puede extender el menú con el siguiente código:

getToolbar().inflateMenu(R.menu.toolbar_menu_gmr);

Alternativamente, puede anular createOptionsMenu, pero prefiero el método anterior porque no depende de la superclase.

Cuando la publicación da como resultado un proceso en segundo plano Cuando el fragmento no se inserta o no está en estado de recuperaciónacceder a una vista dentro de un Fragmento puede generar una excepción NullPointer.

Entonces, al acceder a getView o getActivity después de una tarea o publicación en segundo plano, debe Todas las tareas en segundo plano deben cancelarse al salir Hacer.

No se llama a onActivityResult() de fragmentos anidados. La secuencia de llamada es la siguiente.

  1. Activity.dispatchActivityResult().
  2. FragmentActivity.onActivityResult().
  3. Fragment.onActivityResult().

Si desea usarlo, debe llamarlo desde el Fragmento o Actividad principal.

Cuando desee pasar parámetros en Fragment, debe usar Bundle en lugar de constructor.

documentación oficial: Todos los Fragmentos deben tener un constructor vacío y se les llama cuando se recarga el estado activo. Cuando se vuelve a crear el fragmento, no se llama al constructor no nulo, por lo que es mejor pasar los parámetros a través del constructor. setArguments(Bundle)Pasar a getArguments()mejor pensar en ello como

Antes de enviar FragmentTransaction addToBackStack()Al llamar, puede asegurarse de que el usuario regrese a la interfaz principal cuando presione la tecla de retorno en el Fragmento actual.

Si hay un objeto FragmentTransaction en la pila posterior y el usuario presiona el botón Atrás, FragmentManager toma la transacción más reciente de la pila posterior y hace lo contrario. (por ejemplo, si acaba de agregar un Fragmento, elimínelo)

Los fragmentos parecen fáciles de manejar a primera vista, pero hay muchas cosas a tener en cuenta, como la memoria, la navegación, las devoluciones de llamada y la agrupación. Esperamos que este artículo cubra algunos de los problemas y errores más comunes que encuentra al usar Fragmentos.

LEER  Comience con Bugfender. ¿Qué es un repelente de insectos? | Por Shrey Sindher | Enero de 2022

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba