Menu de contexto sem ListActivity

1 Flares Twitter 0 Facebook 0 Google+ 1 LinkedIn 0 Filament.io 1 Flares ×

Se você já tentou tentou usar um menu de contexto sem um ListActivity sabe que não é tão simples. Mas também não é tão complicado. Abaixo vamos ver uma solução pra implementar um menu de contexto sem usar uma ListActivity.

Primeiro você precisa ter uma lista, que já mostrei como fazer aqui. Agora como vamos implementar um menu de contexto nessa lista? Vamos adicionar o método setOnItemClickListener no seu ListView:

listViewCities.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        registerForContextMenu(listViewCities);
        cidade_menu = listaCidades.get(position);
        openContextMenu(view);
    }
});

Note que eu estou salvando em na variável global cidade_menu qual a cidade que foi “clicada” através do comando cidade_menu = listaCidades.get(position); pois será importante saber depois em qual item da lista o usuário clicou. Na sequência estou chamando o método que abre o menu efetivamente. Esse método precisa ser reescrito para você definir quais as opções que o seu menu terá:

@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo){
    if (cidade_menu.getFavorita()){
        menu.add(Menu.NONE, 0, 0, "Desmarcar Favorita");
    } else {
        menu.add(Menu.NONE, 0, 0, "Marcar Favorita");
    }
    menu.add(Menu.NONE, 1, 1, "Selecionar");
    super.onCreateContextMenu(menu, view, menuInfo);
}

Aqui eu demonstro como fazer um item de menu dinâmico. Dependendo de uma propriedade do objeto escolhido, ou qualquer outra questão que você achar necessário, o menu pode ser customizado. O resultado é este:

Quando o usuário seleciona uma opção é preciso fazer o tratamento dessa opção e isso é feito através do método onContextItemSelected:

@Override
public boolean onContextItemSelected(MenuItem itemSelected){
    item = itemSelected;
    switch (item.getItemId()) {
        case 0: // marcar favorita
            // Faça alguma coisa aqui;
            break;
        case 1: // selecionar
            // Faça outra coisa aqui;
            break;
        default:
            break;
    }
    return super.onContextItemSelected(item);
}

Agora você já pode implementar um menu de contexto sabendo em qual item da lista você clicou  mesmo sem usar um ListActivity.