DialogFragment no Android, Entendendo e Utilizando

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /DialogFragment no Android, Entendendo e Utilizando

DialogFragment no Android, Entendendo e Utilizando

Vinícius Thiengo
(10572) (29)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Na vídeo aula acima será apresentado como implementar uma caixa de diálogo como uma Light Box (ou Modal Box) e também como uma Splash Screen (ou Loading Screen) em projetos Android. Isso utilizando a API DialogFragment.

Ai você pergunta: mas Thiengo, aparentemente o uso da DialogFragment para caixas de diálogo é menos simples do que o uso da API AlertDialog, certo?

Sim, é isso. Porém as caixas de diálogo, independente do objetivo delas em projeto, têm de ser acionadas por alguma entidade host. Essa entidade host tende a ser ou uma atividade ou um fragmento.

E em muitos casos a entidade host já tem seus próprios algoritmos, mesmo quando o projeto é todo desenvolvido em camadas.

Aonde eu quero chegar com isso?

Utilizando APIs de caixa de diálogo como AlertDialog, ou como a simples Dialog, para formulários ou qualquer outro conteúdo mais "crítico" em caixa de diálogo, conteúdo que exige, por exemplo, processamento em um back-end Web.

Fazendo isso o que você também conseguirá em seu projeto é um código ainda mais "inchado", pois o que deveria estar em um ciclo de vida único, que é a principal vantagem do uso da API DialogFragment, está também na entidade host da caixa de diálogo, uma atividade ou um fragmento.

Para simples apresentações de informações ao usuário: sim, a AlertDialog ou a Dialog API são, sem sombra de dúvidas, melhores escolhas.

Mas se o algoritmo que será processado, pós apresentação da caixa de diálogo, exigir que a caixa de diálogo continue aberta devido ao processamento que ocorrerá a partir de alguma ação iniciada a partir dela, então certamente utilizar a DialogFragment API é a melhor escolha.

Na vídeo aula acima, mesmo ela sendo um pouco antiga e utilizando como IDE o Eclipse, fique atento quanto aos estilos e temas apresentados. Os estilos são somente os mostrados em vídeo, porém os temas são inúmeros, alias você pode até mesmo criar o seu próprio.

Uma informação importante sobre o conteúdo da vídeo aula:

Se você for utilizar o método onCreateDialog() ante ao método onCreateView() para poder criar sua caixa de diálogo com a DialogFragment API, isso partindo de Dialog e não de View, você então não deve utilizar o método setStyle() da DialogFragment e você também deve comentar o método onCreateView(), pois este prevalece, em invocações internas da API DialogFragment, ao uso do método onCreateDialog().

Investi um bom tempo testando todos os métodos do ciclo de vida da DialogFragment, mas vale a pena conhecer estes e saber que o funcionamento do ciclo de vida desta API é basicamente o mesmo do ciclo de vida de atividades e fragmentos.

Reforçando: conhecer por completo o funcionamento do ciclo de vida de uma API é sinônimo de conhecer ela por inteiro, algo que lhe dá ainda mais arsenal quando em desenvolvimento.

Duas últimas observações sobre o conteúdo da vídeo aula:

  • A cor da caixa de diálogo do projeto de exemplo é personalizável, logo, não fique preocupado com a cor que eu utilizei, você poderá utilizar qualquer cor em seu projeto;
  • Utilize android.support.v4.app.DialogFragment (ou androidx.fragment.app.DialogFragment em caso de já estar com o AndroidX em projeto) ao invés de android.app.DialogFragment quando for usar está API de caixa de diálogo, isso, pois a android.app.DialogFragment foi depreciada a partir do Android API level 28, o Android 9 ou apenas Android Pie.

Antes de finalizar o artigo, deixo a seguir alguns links de outros posts do Blog, com seus respectivos vídeos, que lhe colocarão em dia com o que há de novo no desenvolvimento de apps Android:

E caso você tenha como meta aprender a construir aplicativos Android, ou evoluir nesta área, também com os conteúdos livres do Blog, então não deixe de acessar a lista de estudos em: Estudando Android - Lista de Conteúdos do Blog.

E... não esqueça de se inscrever 📫na lista de e-mails do Blog para receber todos os conteúdos exclusivos Android, em primeira mão.

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades disponibilizadas lá.

Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, na seção "Download".

Abraço.

Eclipse IDE vs Android Studio IDE

Apesar de o conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.

Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito útil.

AndroidX

Apesar do conteúdo sobre DialogFragment ser útil e um diferencial para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.

Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Fontes

DialogFragment - documentação oficial Android

Using DialogFragment

Creating a custom Dialog with DialogFragment

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Drag e Drop no Android, Entendendo e UtilizandoDrag e Drop no Android, Entendendo e UtilizandoAndroid
Iniciando com Dropbox API no AndroidIniciando com Dropbox API no AndroidAndroid
Download e Upload com Dropbox API no AndroidDownload e Upload com Dropbox API no AndroidAndroid
ExpandableListView no Android, Entendendo e UtilizandoExpandableListView no Android, Entendendo e UtilizandoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (29)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
26/05/2018
Boa tarde, Thiengo. Tenho um RecyclerView populado com objetos. Estou tentando fazer com que ao clicar em um item da lista, um objeto, abra um DialogFragment mostrando atributos deste objeto. Procurei alguns tutoriais mas não consegui avançar. Tem alguma dica que possa ajudar? Abraço!
Responder
Vinícius Thiengo (1) (0)
27/05/2018
Weriks, tudo bem?

Você precisa saber como vincular o listener de clique ao RecyclerView. Você consegue isso colocando o código de clique no ViewHolder deste framework de lista.

Tenho dois conteúdos que vão lhe ajudar com isso, seguem links:

-> https://www.thiengo.com.br/recyclerview-material-design-android-parte-2

-> https://www.thiengo.com.br/animacao-onlongpress-e-gridlayoutmanager-em-recyclerview-material-design-android-parte-3

Weriks, com isso será fácil aproveitar o conteúdo de DialogFragment disposto acima para então colocar a funcionalidade de "clique and show object content" em seu aplicativo.

Algumas outras alternativas de dialog você encontra no Android-Arsenal, alternativas que podem já conter o layout requerido em seu domínio do problema e exigindo menos linhas de código de sua parte:

-> https://android-arsenal.com/tag/30?sort=rating

Abraço.
Responder
27/05/2018
Tudo bem, sim! Esqueci me mencionar que já tenho o RecyclerView funcionando. Implementei de forma que ao clicar é aberta uma outra activity mostrando os atributos do objeto clicado. Vou estudar o conteúdo e posto o feedback. Obrigado!
Responder
29/05/2018
Boa noite, Thiengo! Consegui criar o DialogFragment com os objetos do RecyclerView. Porém estou com um problema. Dependendo do objeto, o tamanho em tela ocupado pelo DialogFragment varia. Inclusive atravessa o topo e a base.
É possível deixar um tamanho pré configurado que seja portável para outras telas? É possível limitar o DialogFragment para mostrar sem ultrapassar a ActionBar, por exemplo? Obrigado pelos tutoriais! Tem ajudado bastante! Abraço!
Responder
Vinícius Thiengo (0) (0)
29/05/2018
Weriks, faça o seguinte.

Coloque como ViewRoot do layout do DialogFragment um ScrollView, dessa forma a expansão que está ocorrendo tende a parar.

Caso não conheça o ScrollView, veja o conteúdo do link a seguir:

-> https://www.thiengo.com.br/scrollview-horizontalscrollview-no-android-entendendo-e-utilizando

Trabalhar com o Scroll, em meu ponto de vista, é uma melhor opção ante definir tamanhos para o DialogFragment.

Abraço.
Responder
30/05/2018
Bom dia, Thiengo! Já havia implementado o ScrollView. E mesmo assim não deu certo. Vou lhe enviar algumas imagens pelo Facebook.
Responder
01/06/2018
Boa tarde, Thiengo! Venho com mais um problema que não estou sabendo resolver. Utilizo um DialogFragment para mostrar informações. Porém, em versões mais antigas do android, como 4.1, ele não mostra de forma devida. Já utilizo o support.v4.app  no DialogFragment.

Imagem na versão 4.1: https://ibb.co/cqQvLy
Imagem na versão 7.1: https://ibb.co/nB1XYJ

Qualquer dúvida é só perguntar. Abraço!
Responder
Vinícius Thiengo (0) (0)
06/06/2018
Weriks, tudo bem?

No método onCreateDialog() de seu DialogFragment coloque o código a seguir:

...
val dialog = super.onCreateDialog( savedInstanceState )
dialog.window!!.requestFeature( Window.FEATURE_NO_TITLE )
return dialog
...

Veja se assim a barra de topo branca da caixa de diálogo sai das versões abaixo do Android 21. E se as outras Views se ajeitam no layout.

Para saber mais sobre esse problema, estude todos os códigos Kotlin no link a seguir:

-> Dialog de criação de tarefa: https://www.thiengo.com.br/seguranca-e-persistencia-android-com-a-biblioteca-hawk#title-12

Abraço.
Responder
fabiano (1) (0)
25/04/2018
Thiengo, o mais estranho é que não aparecem os botões de confirmar e cancelar e não consigo digitar nada no EditText, não setei nada no estilo ou no tema, o que pode ser?
Responder
Vinícius Thiengo (0) (0)
28/04/2018
Fabiano (ou Rafael), tudo bem?

Se não me engano, até mesmo os botões, quando se tratando do DialogFragment, somos nós developers que temos de definir no layout que será utilizado.

Chegou a fazer isso?

Abraço.
Responder
14/03/2017
Thiengo tranquilo? como faço para fechar o dialog pela a activity que o chamou ? Exemplo : fechar o dialog pela MainActivity.

obrigado.
Responder
Vinícius Thiengo (0) (0)
16/03/2017
Allan, tudo bem aqui.

Você pode fazer da seguinte maneira:

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragAnterior = fm.findFragmentByTag( ?sua_frag_key? );
if (fragAnterior != null) {
     ft.remove( fragAnterior );
}

Assim deve funcionar sem problemas. Lembrando que sua Activity deve herdar de AppCompatActivity ou diretamente de FragmentActivity. Abraço.
Responder
Ruan Alves (1) (0)
10/05/2015
Thiengo bllz? seguinte como faço para definir que a dialog se adapte aos diferentes tamanhos de tela, pois a que eu estou fazendo é estilizada, e preciso que fica agradavel o tamanho para diferentes tamanho de telas .. vlw
Responder
Vinícius Thiengo (0) (0)
10/05/2015
Fala Ruas, blz?
Utilize DPs, WRAP_CONTENT e MATCH_PARENT nos atributos layout_width e layout_height. Provavelmente deve ser o suficiente para Dialogs. Abraço
Responder
Ruan Alves (1) (0)
14/04/2015
Como sempre ... fodástico!
Responder
10/03/2015
Sabe me dizer se é possível popular um DialogFragment com OptionMenu?

Tentei utiliazar o onCreateOptionMenu, mas não apareceu.
Responder
Vinícius Thiengo (0) (0)
11/03/2015
Fala Marcelo, blz?
Como na bar da Activity? Se não me engano não é possível, porém vc pode tentar construir um na mão, crie um layout separado e depois somente dê um include no layout do DialogFragment, já fiz assim uma vez quando queria a bottom bar de minha APP de uma maneira que não tinha nada nativo que me ajudasse, logo criei a bottom bar e somente dei o include depois. Abraço
Responder
Carlos Andrade (1) (0)
23/02/2015
Thiengo! Para passar valor entre o Dialog e a Activity que o chamou uso intent ou acesso os objetos da Activity de boa?
Responder
Vinícius Thiengo (0) (0)
24/02/2015
Fala Carlos, blz?
Pode utilizar métodos públicos de sua Activity tanto para buscar valores (getters) quanto para seta-los (setters), não aconselho trabalhar diretamente com variáveis de instancias públicas em sua Activity. Mas para acessar a Activity dentro de seu DialogFragment vc terá de realizar o cast, tipo:

((MainActivity) getActivity()).setDado(dado);

Abraço
Responder
Marco Aurelio (0) (0)
19/02/2015
Olá Blz?

Muito bom o seu blog, me tirou muitas duvidas. Porém estou com uma dúvida quanto a chamada do "dialogframent". Vc chama pelo android:onclick no button, mas se eu quizer chama-lo apartir de um botão da ActionBar "<menu ><item....../>?
Responder
Vinícius Thiengo (0) (0)
20/02/2015
Fala Marco, blz?
Pode chamar de qualquer lugar, coloquei dentro do button somente para exemplo. Abraço
Responder
31/01/2015
Muito Boa a sua Video Aula, parabens, muito mesmo.Mas me restou uma duvida. Toda vez que crio um botão ele vai para o mesmo Dialog Fragment. Como posso fazer com que dois botões  acesse dois Dialog Fragment diferentes?
Responder
Vinícius Thiengo (0) (0)
01/02/2015
Fala William, blz?
Não, vc pode criar mais de um botão e chamar DialogFragments diferentes, basta ter os DialogFragments declarados na APP. Era isso? Abraço
Responder
01/02/2015
Sim era isso, mas seria muito se eu pedisse apenas um exemplo? Para uma maior compreensão..Obrigado
Responder
Vinícius Thiengo (0) (0)
02/02/2015
William, utilize o mesmo Script que já existe, porém acrescente mais um botão com um outro id, faz o mesmo procedimento que o botão anterior, porém abrindo dentro do listener do novo botão o próprio Dialig dele, pode ser o mesmo tipo de DialogFragment ou outra implementação... ve se consegue ai. Abraço
Responder
Rodrigo (2) (0)
11/09/2014
Oi Thiengo tudo bom? muito bom seu vídeo e seu blog é excelente, mas eu queria fazer uma pergunta a vc que não tem muito haver com o conteúdo do vídeo, Na verdade nem é bem uma pergunta eu só queria mesmo é saber a opinião de uma pessoa mais experiente no assunto.. É o seguinte, eu tenho bastante ouvido falar de um tal site chamado "Fabrica de Aplicativos" como já diz o nome é um site onde vc faz apps sem saber nada de programação e tals, e como ele tem vários por ai, então eu queria saber, Você como um profissional da área o  que vc acha disso? Vale apena fazer uma app em um site desses, e os recursos são muito limitados? Desde já agradeço pela resposta, sempre acompanho seu blog ele é 10. Abraços
Responder
Vinícius Thiengo (1) (0)
11/09/2014
Fala Rodrigo, blz?
Então, se vale a pena ou não depende mt de suas necessidades de projeto, eu não conheço o site / sistema, pois nunca fiz uma APP nele, mas aparentemente ele é uma excelente escolha se vc está com um projeto em mente que não requer recursos mais avançados (um blog em versão mobile, por exemplo). Como assim recursos avançados se vc nem conhece o sistema deles? Bom, por ser simples de fazer partindo que o usuário não precisa ser programador e que não tem nenhum desenvolvedor profissional do outro lado pegando os requisitos e fazendo a APP na "unha", acredito que deve sim haver uma série de limitações. Por exemplo, mt provavelmente vc não pode acessar o código fonte do AndroidManifest.xml que é o arquivo de configuração da APP, e dependendo da APP que vc quiser criar o acesso na mão ao código do AndroidManifest.xml é inevitável, mas esse foi apenas um exemplo. Resumindo, se seu projeto é algo que não vai crescer mt, e que em parte é a versão mobile de um simples sistema, acredito que esse site pode sim ser a melhor opção e tb mt mais barato, caso contrário ou vc terá de programar ou contratar um developer ou uma empresa para desenvolver a APP. Deu para ajudar? Abraço.
Responder
Rodrigo (1) (1)
11/09/2014
Muito obrigado cara, eu tava dando uma sondada nele, e vendo alguns videos e é mesmo como vc disse, da pra fazer coisas simples, mas uma app mais inovadora, robusta tipo a app do seu blog nem pensar.. Acho q é mais pra quem precisa de uma coisa simples e rápida mesmo. Muito obrigado cara sempre é bom ouvir a opinião de quem verdadeiramente entende do assunto! me ajudou bastante. Abraços e fica com Deus!
Responder
Wiliam (0) (0)
09/09/2014
Show de bola Thiengo,  parabéns!
Responder