ContextMenu no RecyclerView. Material Design Android - Parte 17

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

Email inválido.
Blog /Android /ContextMenu no RecyclerView. Material Design Android - Parte 17

ContextMenu no RecyclerView. Material Design Android - Parte 17

Vinícius Thiengo
(4709) (30) (2)
Go-ahead
"Sempre procure algo que possa ser aprimorado. Nunca, jamais, conforme-se com o lugar onde está. A maneira como você atinge seus objetivos é sempre experimentar, até que consiga perceber se atingiu um ponto mais alto."
Jeff Sutherland
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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 (6)

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