¿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);
}
android
android-layout
android-fragments
Herrero
fuente
fuente
Respuestas:
Nos enfrentamos a algunos bloqueos al inicializar la vista en
onCreateView
.Porque a veces la vista no se inicializa correctamente. Por lo tanto, use siempre
findViewById
enonViewCreated
(cuando la vista esté completamente creada) y también pasa la vista como parámetro.onViewCreated
es asegurarse de que la vista se haya creado por completo.Se llama inmediatamente después de que
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.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 vista se ha creado por completo. Sin embargo, la jerarquía de vistas del fragmento no está vinculada a su padre en este punto.fuente
post
(...) método para esperar hasta que se muestre. Probablemente hará findViewById y otra inicialización enonViewCreated
.onViewCreated
se llama inmediatamente despuésonCreateView
(el método que inicializa y crea todos sus objetos, incluido suTextView
), por lo que no es una cuestión de rendimiento.Desde el sitio del desarrollador:
Fuente: Fragmento # onViewCreated
fuente
Es mejor realizar cualquier asignación de subvistas a campos en
onViewCreated
. Esto se debe a que el marco realiza una verificación automática de nulos para asegurarse de que la jerarquía de vistas de su Fragmento se haya creado e inflado (si usa un archivo de diseño XML) correctamente.Fragmento de código de: FragmentManger.java
fuente
onCreateView
se utiliza para crear la jerarquía de vistas del fragmento. Esto puede ser mediante la inflación de XML o la creación dinámica (es decir, creando vistas de Java mediante programación). Así que no puede llamarinflate
en absoluto. Pero debe devolver alguna vista principal si el fragmento necesita tener un elemento de IU. De lo contrario, regresenull
.FragmentManager
código y fragmento deperformCreateView
, que llama aonCreateView
github.com/android/platform_frameworks_base/blob/… , se le garantizan algunas cosas para laonViewCreated
devolución de llamada del ciclo de vida:onCreateView
devuelve la vista inflada.OnViewCreated
se llama justo despuésonCreateView
y get tiene el parámetro de la vista inflada. Su tipo de retorno esvoid
fuente
getView
llamadaonCreateView()
es el Fragmento equivalente deonCreate()
para Actividades y se ejecuta durante la creación de la Vista.onViewCreated()
se 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 de rendimiento.En realidad, también hay un
onCreate()
método en Fragments, pero rara vez se usa ( nunca lo uso, ni le encuentro un buen caso de uso).Siempre utilizo
onCreateView()
Fragments como reemplazo deonCreate()
.Y estoy feliz con eso.
fuente
onCreateView
es un equivalente de ActivityonCreate
.onCreate()
método en Framents. Pero nunca se usa (o, al menos, yo nunca lo uso). Siempre utilizoonCreateView()
Fragments como reemplazo.Los documentos por
Fragment.onCreateView()
ahora dicen:No es necesario que entendamos por qué; solo tenemos que hacer lo que dice la documentación, pero sería interesante saber por qué existe esta recomendación. Mi mejor suposición es la separación de preocupaciones , pero en mi humilde opinión, esto lo hace un poco más complicado de lo que debería ser.
fuente
setContentView()
enonCreate()
?La razón principal por la que lo usaría
onViewCreated
es porque separa cualquier lógica de inicialización de la lógica de creación / inflación de la jerarquía de vista que debería ir enonViewCreate
. Todas las demás características de rendimiento tienen el mismo aspecto.fuente
Creo que la principal diferencia entre estos es cuando usa kotlin.in onCreateView () cada vez que desea acceder para ver en su archivo xml, debe usar findViewById pero en onViewCreated simplemente puede acceder a su vista simplemente llamando al id. .
fuente
onCreateView se usa en fragmentos para crear diseño e inflar la vista. onViewCreated se usa 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.
fuente