ContextMenu no RecyclerView. Material Design Android - Parte 17

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 /ContextMenu no RecyclerView. Material Design Android - Parte 17

ContextMenu no RecyclerView. Material Design Android - Parte 17

Vinícius Thiengo
(6545) (24)
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

Opa, blz?

Nesse vídeo 17 da série sobre Material Design no Android mostro uma implementação simples da feature de ContextMenu no RecyclerView. Apesar de parecer algo simples e que tenha já uma entidade no Android pronta para atender a essa demanda, na verdade temos de implementar na mão e dependendo do código que for utilizar você terá de gastar um bom tempo para entendê-lo.

A implementação do ContextMenu no RecyclerView desse vídeo ficou relativamente simples devido ao uso da classe ListPopupWindow que já faz a parte que provavelmente seria a mais difícil, posicionar o menu drop down no local correto. No vídeo temos de contornar alguns problemas para que tenhamos o resultado desejado, mas nada que envolva muitas linhas de código.

Fique atento a parte de resolução do clique no icon do ContextMenu, o icon que está dentro do CardView que é root nos itens do RecyclerView, pois daquela forma você consegue capturar o clique em qualquer outra view dentro de um item no RecyclerView, essa provavelmente é a parte mais interessante depois da implementação do ContextMenu. Note no final do vídeo um exemplo simples de como chamar uma Activity a partir do clique no item do ContextMenu. Bom, sem mais delongas, vou deixar você assistir ao vídeo.

O repositório do projeto se encontra no GitHub, no link a seguir: https://github.com/viniciusthiengo/tc-material-design

Para assistir a série completa do Material Design no Android acesse o link abaixo:

Material Design Android

Vídeos que podem ajudar a entender melhor o vídeo a cima:

RecyclerView, Material Design Android - Parte 2

Animação, onLongPress e GridLayoutManager em RecyclerView, Material Design Android - Parte 3

Utilizando BaseAdapter Para Personalização Completa da ListView

Suporte de Tela com Drawable DPI no Android

Segue links das páginas apresentadas no vídeo:

Página do componente Menu no site do Material Design Android

Página da classe ListPopupWindow no site documentação do Android

Site de icons para o Material Design: MaterialDesignIcons.com

Site gerador de imagens NinePatch

Vlw

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

Buscas Com SearchView e SearchRecentSuggestions. Material Design Android - Parte 13Buscas Com SearchView e SearchRecentSuggestions. Material Design Android - Parte 13Android
AppWidget. Material Design Android - Parte 14AppWidget. Material Design Android - Parte 14Android
APP Invites Para Compartilhamento. Material Design Android - Parte 15APP Invites Para Compartilhamento. Material Design Android - Parte 15Android
Date e Time PickerDialog. Material Design Android - Parte 16Date e Time PickerDialog. Material Design Android - Parte 16Android

Compartilhar

Comentários Facebook

Comentários Blog (24)

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...
César Leal (1) (0)
01/08/2016
Opa beleza,
Parabens pelos ensinamentos rsrs.
Eu fui tentar fazer um teste nesse material e apresentou o seguinte erro:

10119-10119/br.com.thiengo.tcmaterialdesign I/LOG: onErrorResponse(): org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONArray
Responder
Vinícius Thiengo (0) (0)
01/08/2016
Fala César, blz?
Lhe respondi nos comments do Facebook. Abraço
Responder
23/12/2015
Parabéns pelos videos,

Nesse exemplo que você utilizou, esta colocando evento de click em somente um botão, se eu tivesse mais botões nesse card, como deveria fazer no evento onClick()?

Obrigado
Responder
Vinícius Thiengo (0) (0)
26/12/2015
Fala Tiago, blz?

Da mesma maneira, porém pegando tb as coordenadas dos outros buttons.

Note que é possível utilizar o click nos buttons da maneira mais fácil, utilizando o Adapter do RecyclerView (veja esse vídeo: http://www.thiengo.com.br/recyclerview-material-design-android-parte-2 ).

No vídeo não fiz da maneira mais fácil, pois o objetivo foi manter toda a área do CardView clicável, porém respeitando quando o click em um button especifico é gerado, abrindo somente a funcionalidade dele. Abraço
Responder
Thiago (1) (0)
26/10/2015
Boa tarde Thiengo! blz?
Estou com problema com palavras de acentos e cecedilha ao listar no RecyclerView, tipo, eu busco os dados no formato json do web service converto os dados para objeto e listo no RecyclerView, porém  as palavras com acentos e cecedilha aparecem com caracteres desconfigurados. Você poderia me ajudar a resolver esse problema? Obrigado e parabéns pelo Blog.
Responder
Vinícius Thiengo (1) (0)
30/10/2015
Fala Thiago, blz sim.
Provavelmente seu problema está no backend, os dados já estão sendo entregues dessa forma. Se estiver com o PHP na backend Web utilize primeiro a função utf8_encode() nos dados antes de coloca-los no json, caso mesmo assim nada (provavelmente vai piorar se não der certo) utilize o ut8_decode(), uma das duas deve resolver. Se não estiver com o PHP no backend veja o equivalente a essas funções na linguagem que está utilizando. Abraço
Responder
Thiago (1) (0)
30/10/2015
Thiengo, com sua orientação resolvi o problema. Você é o cara. rs! Muito obrigado pela atenção. Mais uma vez, Parabéns pelo seu trabalho. Abraço
Responder
08/10/2015
H
I have one more question.
I would active favorito icon in contextmenu but could not.
Before do this with sharedpreference and listview in baseadapter but Here does not work.
Help me please
Responder
Vinícius Thiengo (0) (0)
10/10/2015
Hi Ghafoori,
When you say that, you meant you already have the icon and button being shown properly, but button action is not working like needed? I'll assume that's true, so what you can do is: use SQLite to save the itenm id when it is marked like favorite and when in your code the list linked in Recycler adapter starts to be filled, your code just verify in SQLite if the actually item has already being marked like a favorite (using its id), so it will show a favorite icon in item line on Recycler, if its marked. Try in that way, probably it will work good. Have a good one. Talk soon.
Responder
Ruan Alves (1) (0)
06/10/2015
Blz?

Seguinte quando eu seleciono, quero colocar um efeito RippleEffect, algum exemplo?
Responder
Vinícius Thiengo (0) (0)
07/10/2015
Fala Ruan, blz?
No Blog não tem essa aula, mas veja essa do SlideNerd (https://www.youtube.com/watch?v=qvVkDb7DqCk&list=PLonJJ3BVjZW6CtAMbJz1XD8ELUs1KXaTD&index=25 ), de repente lhe ajuda. Abraço
Responder
Ruan Alves (1) (0)
28/09/2015
Boa tarde! Beleza?

Seguinte, você usou o click no botão, mais quero que esse ListPopupWindow suba quando clicar no item listado .... então no meu Adapter eu tenho o click, e tb la no meu Fragment, quando eu clico ele tb da informação, ou seja quando clico ele alem de ir no adapter vai para o fragment, minha pergunta é aonde ele deve ficar, no adapter ou no fragment? ... pois como falei quando clico no item ele da 2 informações, passa no adapater por causa do ListPopupWindow e passa no fragment pela implementação do RecyclerViewOnClickListenerHack
Responder
Vinícius Thiengo (0) (0)
30/09/2015
Fala Ruan, blz?
No script do ContextMenu somente o listener de click do fragment é que tem relevância, logo seu script de andar com o ListPopupWindow deve ser implementado onde tem relevância, no listener do fragment, no caso. O listener do adapter vc pode comentar se achar melhor, na verdade se for comentar, comente a linha ivContextMenu.setOnClickListener(this); que está dentro do ViewHolder dentro do CarAdapter. Abraço
Responder
19/09/2015
Hey, I did not understand, can you explain to me with a sample code so that what should i do?
Responder
Vinícius Thiengo (0) (0)
19/09/2015
Ok Navid, take a look on this example (http://www.4shared.com/zip/14fGlTY7ba/ReadTextFileFromWeb.html ). In that one I put a text file called info.txt inside /raw folder and then the script fill description array with that file data. Have a good one.
Responder
18/09/2015
Oi
no projeto, você usa como string [] descrption = new string [] {"", "", ""};
Como eu uso o arquivo de texto armazenado em pasta crua teste direto em vez de entrada em um novo string [] {"", "", "" {} ;?
Eu quero um arquivo de texto separado você colocar cada item mostrado
Responder
Vinícius Thiengo (0) (0)
18/09/2015
Hey Navid, what's up?
Actually you can just open a text file from /raw folder doing something like this (http://stackoverflow.com/a/16741466/2578331 ). After that you can try to use that content inside your own array or another data structure. Have a good one.
Responder
Vinícius Thiengo (0) (0)
18/09/2015
You need to realize that after open file an take the content, the script will work like in the video, of course if you put it inside a String Array. Talk soon.
Responder
Ricardo (1) (0)
31/07/2015
Boa tarde.
Parece que está faltando a classe Transaction do package br.com.thiengo.tcmaterialdesign.network.
Responder
Vinícius Thiengo (0) (0)
01/08/2015
Fala Ricardo, blz?
Vlw, já estou sabendo desse problema, vou resolver aqui. Abraço
Responder
26/07/2015
Este era o App que faltava para agregar conhecimento. Muito bom mesmo.
Responder
Alessandro (2) (0)
22/07/2015
Parabéns, Thiengo! Muito bom como sempre.
Responder
dtiburcio (2) (0)
20/07/2015
Parabéns, Thiengo! Como sou chato, vai mais uma sugestão: coloque uma figura com o resultado do post. Abração
Responder
Vinícius Thiengo (1) (1)
21/07/2015
Fala dtiburcio, blz?
Vc diz a foto da APP no banner? É exatamente o resultado da implementação, se não me engano um label é que está diferente, ao invés de ser "Empresa de Vendas" está "Empresa" apenas. Abraço
Responder