Un Fragment
es un enfoque útil, creo que, cuando se quiere amarrar algo de lógica de negocios de interfaz de usuario a un determinado View
(o grupo de). Como usted sabe, ese individuo Fragment
tiene sus propias devoluciones de llamada de ciclo de vida y demás, al igual que un Activity
.
En lugar de tener una sola Activity
anfitrión muchas ListView
s a través de una sola PagerAdapter
, se puede ser más limpio a utilizar el enfoque Fragment
porque el Fragment
sólo tiene que hacer frente a la lógica detrás de la conducción de un solo ListView
.
Esta es una situación muy similar a la que acabo de enfrentar. Estoy mostrando varias formas de desplazamiento vertical (que constan de muchos campos de entrada) dentro de un ViewPager
. En mi caso, opté por el enfoque Fragment
porque, en mi caso, es posible que el ViewPager
realmente necesite mostrar un tipo de vista completamente diferente en ciertas páginas. Por ejemplo, en las primeras páginas, se pueden mostrar los formularios de entrada del usuario. Pero en la página final, se mostrará un gráfico. Se requiere un conjunto completo de lógica para conducir ese gráfico. Manejar esos formularios de entrada y un gráfico desde un solo Activity
sería un poco complicado, y probablemente necesitaría contener la lógica de negocios en varias clases de delegados o algo así. Así que para mí, Fragment
s fueron la elección obvia al final. Tengo mi InputFormFragment
y GraphFragment
, y cada uno contiene solo la lógica aplicable para el View
s que suministran.
Otra cosa a tener en cuenta es que en un futuro próximo también es posible que desee mostrar un tipo diferente de View
en su ViewPager
. O bien, es posible que desee tener otro diseño de interfaz de usuario, tal vez uno que no use el ViewPager
pero que los muestre todos de lado a lado (por ejemplo, un diseño utilizado en una tableta grande en modo horizontal). Con Fragment
s, las cosas son mucho más modulares y podría factorizar el código para hacerlo más rápido. Si, por otro lado, logró su objetivo utilizando un solo Activity
que contiene un simple PagerAdapter
y toda la lógica para el ListView
s dentro, es posible que en el futuro necesite más trabajo para admitir nuevos tipos de View
o diseños de tableta especiales. .
Una cosa voy a decir que se hayan aplicado Fragment
s en un ViewPager
mí mismo a través FragmentPagerAdapter
y FragmentStatePagerAdapter
, las cosas pueden ser un poco incómodo si usted tiene cualquier requisito especial; administrar Fragment
s puede ser complicado a veces. Por ejemplo, para mi UI necesitaba poder agregar y eliminar mediante programación el ViewPager
que contiene el Fragment
s. También necesitaba asegurarme de que el adaptador en uso no destruyera Fragment
s una vez que se hubieran mostrado, porque necesitaba recopilar datos de todos los Fragment
simultáneamente en un cierto punto. Además, tuve que extender y modificar FragmentPagerAdatper
para asegurarme de que Fragment
s pasan por su onDestroy()
correctamente y se eliminan del FragmentManager
cuando se eliminó ViewPager
.
Fragment
s permiten una forma muy modular de construir interfaces de usuario para varios tamaños de pantalla y orientaciones, y son excelentes en cuanto a cómo encapsulan lógica de negocios y ciclos de vida para elementos de IU individuales. Sin embargo, si su escenario es tan simple como varios ListView
s en un ViewPager
y usted sabe que nunca necesitará la modularidad, entonces la sobrecarga de Fragment
s podría ser una exageración.
Acerca de la recopilación de información de fragmentos, ¿no sería más fácil crear una interfaz, hacer que el fragmento host haga referencia a un objeto que lo implemente y usar las funciones de interfaz para almacenar la información en ese objeto? –
Si entiendo bien, creo que lo que estás sugiriendo es que en lugar de tener que hacer cosas inteligentes para asegurar que todos los Fragmentos permanezcan en el ViewPager (y no se eliminen constantemente y luego se vuelvan a crear), debería tener un mecanismo para persistir en su estado. Podría haber hecho esto y estaría de acuerdo en que sería un mejor enfoque, pero los Fragmentos en mi aplicación particular son bastante caros de construir. Por razones tanto de codificación como de rendimiento, era más sencillo simplemente asegurar que todos los Fragmentos se mantuvieran, y luego solicitar que todos envíen sus datos juntos. – Trevor