titulo studio programacion móviles libros desarrollo curso cambiar aplicaciones activity android fragment android-custom-view

studio - manual de programacion android pdf



Fragmento contra vista personalizada en Android (5)

Dado que Fragment tiene su propio ciclo de vida, puede sobrevivir incluso si la Activity que está vinculado ha sido destruida. Esta propiedad puede ser una ventaja cuando intenta manejar eventos que causan una destrucción de la actividad, como cambios de configuración (cambio de orientación, por ejemplo).

El Fragmento y la Vista personalizada pueden lograr la función similar. Sé que el fragmento es más reutilizable en comparación con la vista personalizada. ¿Se supone que el fragmento debe reemplazar la vista personalizada o solo una mejora para un propósito específico?

Por ejemplo, el siguiente código es fragmento :

public class TestFragment extends Fragment { private TextView tv_name; private Button btn_play; private Button btn_delete; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.testfragment, container, false); } @Override public void onStart() { super.onStart(); tv_name = (TextView)getView().findViewById(R.id.tv_name); btn_play = (Button)getView().findViewById(R.id.btn_play); btn_delete = (Button)getView().findViewById(R.id.btn_delete); } }

El código para la vista personalizada :

public class TestCustomView extends LinearLayout { private TextView tv_name; private Button btn_play; private Button btn_delete; public TestCustomView(Context context, AttributeSet attrs){ super(context, attrs); setOrientation(LinearLayout.HORIZONTAL); setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); tv_name = new TextView(context); addView(tv_name); btn_play = new Button(context); addView(btn_play); btn_delete = new Button(context); addView(btn_delete); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.testfragment, container, false); } }

Tanto TestFragment como TestCustomView pueden crear una vista que consiste en TextView y Buttons , y usar etiquetas de Framelayout/fragment y com.packagename.TestCustomView para declarar en el archivo de diseño xml de la actividad, pero ¿cuáles son las ventajas de usar Fragment?


El fragmento se puede utilizar en diferentes escenarios, pero los más utilizados son:

  • envolver alrededor de una vista
  • fragmento sin cabeza - es decir, sin vista => no es muy útil en general pero se puede usar
  • Fragmento retenible - puede ser cualquiera de los anteriores. Al utilizar Fragment.setRetainInstance(true) , puede omitir Fragment.onDestroy() , es decir, puede mantener los datos de fragmentos en los cambios de configuración, pero la estructura de la vista de fragmentos aún se destruye / vuelve a crear.
  • se puede agregar a la pila de actividad, es decir, al botón de Atrás fácil restaurar estado anterior

Hay casos en que los fragmentos son dolor completo en el cuello, luego hay casos en los que pueden lograr resultados más rápidamente.

Para algunas situaciones personalizadas y más flexibles, los fragmentos se pueden desordenar y administrarlos sería difícil. Por lo tanto, tratar con las vistas directamente puede ser realmente útil y útil para algunos casos. Pero todo se basa en los requisitos.

Nota La View tiene su propio ciclo de vida y puede almacenar / recrear el estado de la instancia guardada. Un poco más de trabajo pero también tiene la opción.


Las vistas personalizadas tienen la ventaja de ser sencillas y su propósito principal es mostrar un dato en la pantalla. Deben confiar en otros componentes para hacer más.

Piense en los fragmentos como una unidad funcional, una forma de mostrar una parte de la interfaz de usuario que tiene un propósito específico, utilizando una o más vistas. Los fragmentos están conectados al ciclo de vida de la actividad y pueden incluir y controlar los cargadores para completar las vistas con datos. También pueden incluir sub-fragmentos. Finalmente, también se pueden agregar a un back stack sintético. Pueden hacer muchas cosas y son algo complejas de aprender.

Como puede ver, los fragmentos tienen mucho más en común con las actividades que con las vistas personalizadas.

Como nota al margen, los fragmentos también pueden estar sin cabeza (sin interfaz de usuario). Los fragmentos sin cabeza proporcionan una manera de encapsular la funcionalidad no visual que se basa en el ciclo de vida de la actividad en un componente separado.


Los fragmentos vienen con su propio ciclo de vida, que puede ser un impedimento o una bonificación, según lo que necesite.

Los fragmentos obtienen métodos de ciclo de vida como onResume o onSavedInstanceState, que pueden ayudarlo a lidiar con las transiciones de estado en su aplicación. Si está utilizando vistas personalizadas, necesita manejar ese tipo de cosas por su cuenta.

Hay personas que abogan en contra del uso de fragmentos, sugiero leer https://corner.squareup.com/2014/10/advocating-against-android-fragments.html


Un fragmento puede contener algunas vistas, pero una vista no debe contener un fragmento. Así como una forma de estructurar las cosas: Actividad -> Fragmento -> Ver

Y todo depende de sus requisitos y de cómo manejaría la estructura de su aplicación.