Olá Janaina,
Quando o Android gera um menu de contexto, o componente que foi clicado monta um objeto do tipo ContextMenuInfo
contendo informações relevantes para aquele objeto em particular. Por exemplo, se o objeto clicado para abrir o menu de contexto foi uma ListView
, ela própria irá gerar um objeto do tipo AdapterContextMenuInfo
contendo a posição do item clicado. Agora se o objeto fosse uma ExpandableListView
, ela geraria um objeto correspondente que seria um ExpandableListContextMenuInfo
.
Agora vamos nos atentar ao método onCreateContextMenu
:
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo info) {...}
Esse método é invocado sempre que for necessário criar um novo menu de contexto na tela do aplicativo. Isso significa que ele pode vir de qualquer componente que estiver na tela. Por esse motivo, nesse método recebemos apenas um ContextMenuInfo
pois não sabemos qual componente disparou a criação do menu de contexto. Poderia ser tanto um AdapterContextMenuInfo
ou um ExpandableListContextMenuInfo
.
Agora, se sabemos que foi uma ListView
que gerou o menu (nosso aplicativo só tem esse componente que gera menu de contexto), vimos que ela cria um AdapterContextMenuInfo
e passa para o onCreateContextMenu
. Então a situação que temos é que recebemos um ContextMenuInfo
como parâmetro mas temos certeza que ele é um AdapterContextMenuInfo
. Nesse caso, podemos avisar pro Java que queremos converter essa referência de ContextMenuInfo
para AdapterContextMenuInfo
. Fazemos isso usando o casting:
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) info;
Dessa forma, conseguimos acessar os atributos específicos desse objeto e descobrir qual item da lista foi clicado para gerar o menu de contexto.