Qual é a diferença essencial entre esses dois métodos? Quando eu crio um TextView, devo usar um sobre o outro para desempenho?
Edit: Qual é a diferença 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);
}
Respostas:
Enfrentamos algumas falhas ao inicializar o modo de exibição em
onCreateView
.Porque às vezes o modo de exibição não é inicializado corretamente. Portanto, sempre use
findViewById
inonViewCreated
(quando a visão estiver totalmente criada) e também passa a visão como parâmetro.onViewCreated
é uma garantia de que a visualização foi totalmente criada.Chamado imediatamente após
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
) ter retornado, mas antes que qualquer estado salvo tenha sido restaurado na visualização. Isso dá às subclasses a chance de se inicializarem, uma vez que saibam que sua hierarquia de visualização foi completamente criada. A hierarquia de visão do fragmento, entretanto, não está anexada a seu pai neste ponto.fonte
post
(...) método para esperar até que seja mostrado. Provavelmente fará findViewById e outra inicialização emonViewCreated
.onViewCreated
é chamado imediatamente apósonCreateView
(o método que você inicializa e cria todos os seus objetos, incluindo o seuTextView
), portanto, não é uma questão de desempenho.Do site do desenvolvedor:
Fonte: Fragmento # onViewCreated
fonte
É melhor fazer qualquer atribuição de subvisualizações aos campos em
onViewCreated
. Isso ocorre porque a estrutura faz uma verificação nula automática para você para garantir que a hierarquia de visualização do seu Fragment foi criada e aumentada (se estiver usando um arquivo de layout XML) corretamente.Snippet de código de: FragmentManger.java
fonte
onCreateView
é usado para criar a hierarquia de visualização do fragmento. Isso pode ser via inflação XML ou criação dinâmica (ou seja, criando visualizações Java de maneira programática). Portanto, você pode nem ligarinflate
. Mas você deve retornar alguma visão pai se o fragmento precisar ter um elemento de IU. Caso contrário, voltenull
.FragmentManager
código do fragmento eperformCreateView
, que chamaonCreateView
github.com/android/platform_frameworks_base/blob/… , você tem algumas coisas garantidas para oonViewCreated
retorno de chamada do ciclo de vida:onCreateView
retorna a visão inflada.OnViewCreated
é chamado logo apósonCreateView
e get tem o parâmetro de visualização inflada. Seu tipo de retorno évoid
fonte
getView
chamadaonCreateView()
é o Fragment equivalente aonCreate()
for Activities e é executado durante a criação da Visualização.onViewCreated()
é executado após a visualização ser criada.should I use one over the other for performance?
NO . Não há evidência de aumento de desempenho.Na verdade, há um
onCreate()
método em Fragments também, mas raramente é usado (eu nunca o uso, nem acho um bom caso de uso para ele).Eu sempre uso
onCreateView()
em Fragments como um substituto paraonCreate()
.E estou feliz com isso.
fonte
onCreateView
é um equivalente do ActivityonCreate
.onCreate()
método em Framents também. Mas nunca é usado (ou, pelo menos, eu nunca uso). Eu sempre usoonCreateView()
em Fragments como um substituto.A documentação por
Fragment.onCreateView()
enquanto diz:Não há necessidade de entendermos o porquê; precisamos apenas fazer o que a documentação diz, mas seria interessante saber por que existe essa recomendação. Meu melhor palpite é separação de interesses , mas IMHO isso torna um pouco mais complicado do que deveria ser.
fonte
setContentView()
emonCreate()
?O principal motivo que eu usaria
onViewCreated
é porque ele separa qualquer lógica de inicialização da lógica de criação / inflação de hierarquia de exibição que deve ir noonViewCreate
. Todas as outras características de desempenho parecem iguais.fonte
Acho que a principal diferença entre eles é quando você usa kotlin.in onCreateView () toda vez que deseja acessar para visualizar em seu arquivo xml, você deve usar findViewById, mas em onViewCreated você pode simplesmente acessar sua visualização apenas chamando o id dela .
fonte
onCreateView é usado no fragmento para criar o layout e aumentar a visualização. onViewCreated é usado para fazer referência à visualização criada pelo método acima. Por fim, é uma boa prática definir o ouvinte de ação em onActivityCreated.
fonte