onactivitycreated - onattach android
Diferencia entre onCreateView y onViewCreated en Fragment (8)
Creo que la principal diferencia entre estos es cuando usas kotlin.in onCreateView () cada vez que quieres acceder para ver en tu archivo xml debes usar findViewById pero en onViewCreated puedes simplemente acceder a tu vista simplemente llamando a su id. .
¿Cuál es la diferencia esencial entre estos dos métodos? Cuando creo un TextView, ¿debo usar uno sobre el otro para el rendimiento?
Editar: ¿Cuál es la diferencia de
onCreateView() {
root = some view
View v = new View(some context);
root.add(v);
return root;
}
onViewCreated() {
View v = new View(some context);
getView().add(v);
}
Es mejor hacer cualquier asignación de subvistas a los campos en onViewCreated
. Esto se debe a que el marco realiza una comprobación automática nula para garantizar que la jerarquía de vistas de Fragment se haya creado e inflado (si se usa un archivo de diseño XML) correctamente.
Fragmento de código de: FragmentManger.java
// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);
// Null check avoids possible NPEs in onViewCreated
// It''s also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
if (f.mHidden) f.mView.setVisibility(View.GONE);
f.onViewCreated(f.mView, f.mSavedFragmentState);
}
La razón principal que utilizaría en onViewCreated
es que separa cualquier lógica de inicialización de la lógica de inflación / creación de jerarquía de vista que debería ir en onViewCreate
. Todas las demás características de rendimiento tienen el mismo aspecto.
Nos enfrentamos a algunos bloqueos al inicializar la vista en onCreateView
.
Debe inflar su diseño en
onCreateView
pero no debe inicializar otras vistas utilizandofindViewById
enonCreateView
.
Porque a veces la vista no se inicializa correctamente. Por lo tanto, siempre use findViewById
en onViewCreated
(cuando la vista está completamente creada) y también pasa la vista como parámetro.
onViewCreated
es una asegúrese de que la vista esté completamente creada.
onCreateView se utiliza en fragmentos para crear una vista de diseño e inflar. onViewCreated se utiliza para hacer referencia a la vista creada por el método anterior. Por último, es una buena práctica definir el oyente de acción en onActivityCreated.
onCreateView()
es el equivalente de Fragment de onCreate()
para Actividades y se ejecuta durante la creación de la Vista.
onViewCreated()
ejecuta después de que se haya creado la Vista.
should I use one over the other for performance?
NO . No hay evidencia de un aumento en el rendimiento.
En realidad, también hay un método onCreate()
en Frames.
Pero rara vez se usa ( nunca lo uso, ni encuentro un buen caso de uso para ello).
Siempre uso onCreateView()
en Fragmentos como reemplazo de onCreate()
.
Y estoy feliz con eso.
onCreateView
devuelve la vista inflada. OnViewCreated
se llama justo después de onCreateView
y get tiene el parámetro de la vista inflada. Su tipo de devolución es void
onViewCreated
se llama inmediatamente después de onCreateView
(el método que inicializa y crea todos sus objetos, incluido su TextView
), por lo que no se trata de rendimiento.
Desde el sitio del desarrollador:
onViewCreated (Ver vista, Bundle savedInstanceState)
Se invoca inmediatamente después de que onCreateView (LayoutInflater, ViewGroup, Bundle) haya regresado, pero antes de que se haya restaurado cualquier estado guardado en la vista. Esto les da a las subclases la oportunidad de inicializarse una vez que saben que su jerarquía de vistas ha sido completamente creada. Sin embargo, la jerarquía de vistas del fragmento no está asociada a su elemento principal en este punto.