Os documentos dizem isso para o dismiss()
método da Dialog
classe:
Dispensar esta caixa de diálogo, removendo-a da tela. Este método pode ser invocado com segurança a partir de qualquer thread. Observe que você não deve substituir esse método para fazer a limpeza quando a caixa de diálogo for fechada, em vez disso, implemente-o em
onStop()
.
No meu código, tudo o que faço é ligar getDialog().dismiss()
para descartá-lo. Mas não estou fazendo mais nada, nem mesmo usando onStop()
. Portanto, estou perguntando exatamente como descartar corretamente um DialogFragment
para evitar qualquer vazamento de memória, etc.
protected void showDialogFragment(final DialogFragment fragment) {final FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); fTransaction.addToBackStack(null); fragment.show(fTransaction, "dialog");}
Desculpe pelo forro desagradável! Mas sim, você pode estar certo, então, por enquanto, escrevi outra maneira de fechar meus DialogFragments. A maneira que eu estava dispensando-os usando o método dispensar () foi apenas localizando o fragmento por tag e, em seguida, executando despedir () nele se não fosse nulo. Ah, sim, estounew
pegando o fragmento antes de passá-lo para esse método.Acho que a melhor maneira de fechar um
DialogFragment
é esta:Dessa forma, você não precisa manter uma referência ao
DialogFragment
e pode fechá-lo de qualquer lugar.fonte
Por que você não tenta usar apenas este código:
Se você quiser dispensar o Fragmento de Diálogo por conta própria. Você pode simplesmente colocar este código dentro do fragmento da caixa de diálogo onde deseja descartar a caixa de diálogo.
Por exemplo:
Isso fechará o fragmento de diálogo recente que é mostrado na tela.
Espero que ajude para você.
fonte
Eu dei um voto positivo à resposta de Terel. Eu só queria postar isso para qualquer usuário do Kotlin:
fonte
Versão Kotlin da resposta Terel
fonte
Você deve demitir-se
Dialog
emonPause()
modo substituí-lo.Além disso, antes de dispensar, você pode verificar
null
se o snippet a seguir está exibindo:fonte
DialogFragment
do google não mostra oonPause()
método que está sendo usado. Mas acho que vejo o que você está fazendo. Qual é o ponto, se o usuário não estiver ligandoonPause()
. É quando o sistema sabe que o fragmento está sendo retirado. E quando, digamos, um usuário cancelar. Qual é a melhor maneira de fechá-lo nesse caso?Há referências aos documentos oficiais ( Referência DialogFragment ) em outras respostas, mas nenhuma menção ao exemplo dado ali:
Para minhas necessidades, mudei para:
fonte
Somando-se as outras respostas, ao ter uma
DialogFragment
chamada em tela cheia,dismiss()
o DialogFragment não será retirado do backstack do fragmento. Uma solução alternativa é chamaronBackPressed()
a atividade pai.Algo assim:
CustomDialogFragment.kt
fonte
Basta chamar ignorar () a partir do fragmento que deseja dispensar.
fonte
Descobri que quando meu fragmento foi definido no gráfico de navegação com uma
<fragment>
tag (para um dialogfragment de tela inteira), o dialogfragment não descartava com odismiss()
comando. Em vez disso, tive que abrir a pilha de volta:No entanto, se o mesmo fragmento de diálogo foi definido no gráfico de navegação com uma
<dialog>
tag,dismiss()
funciona bem.fonte
fonte