Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Quando usar uma classe anônima

Olá pessoal, fiquei com uma dúvida.

Por que no menu deletar nós usamos o método setOnMenuItemClickListener e implementamos uma classe anônima e nas outras opções do menu não foi necessário?

       MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item)
            {
                Toast.makeText(ListaAlunosActivity.this, "Deletando o aluno " + aluno.getNome(), Toast.LENGTH_SHORT ).show();
                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.Deletar(aluno);
                dao.close();
                carregaLista();
                return false;
            }
        });

        final MenuItem visitar = menu.add("Visitar site do aluno");

        Intent intentSite = new Intent(Intent.ACTION_VIEW);
        intentSite.setData(Uri.parse(aluno.getSite()));

        String site = aluno.getSite();
        if(!site.startsWith("http://")) {
            site = "http://" + site;
        }

        intentSite.setData(Uri.parse(site));
        visitar.setIntent(intentSite);
6 respostas

Assim como na ligação não deu pra fazer do mesmo jeito, o deletar também não da. As outras ações elas chamam outros apps e é possível fazer assim, já o deletar e o ligar não. O outro código é bem mais simples, então quando tu for fazer o menu tu avalia qual a maneira pra ti. Se tu quiser entender melhor o que é a classe anonima pode olhar aqui

E aí Douglas, alguma dúvida?

Oi Vânia, obrigado pela explicação.

Eu só não entendi quando devo usar um e quando devo usar o outro.

Por exemplo, no método de ligar, como o android consegue identificar que houve um click no menu se não implementamos o listener?

Obrigado!

No arquivo da aula ele dá a seguinte explicação: Nós poderíamos criar a Intent desta forma, fazendo o Listener, adicionando o new Intent e o startActivity. A maneira como fizemos anteriormente:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
    MenuItem itemSite = menu.add("Visitar site");
    itemSite.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
          Intent intentSite = new Intent(ListaAlunosActivity.this, Browser.class);
            startActivity(intentSite);
            return false;
        }
});

//...

Porém, será um trabalho repetitivo, todo item de menu terá OnMenuItemClickListener e vamos adicionar um comportamento que basicamente é um Intent e um startActivity. Para não repetirmos sempre este código, o Android disponibilizou um atalho.

solução!

o Android já sabe que o item de menu tem o OnMenuItemClickListener, então ele facilitou isso pra gente. A idea é sempre usar o mais simples, mas em algum momento pode ser que tu tenha que tratar algo, como é no caso da ligação que ele na hora do click quer que antes que você vá para a nova intent faça uma permissão de ligação

Entendi Vânia. Obrigado.