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

Duvida no desenvolvimento do método onCreateContextMenu

Pessoal, tudo bem?

Uma duvida que vejo mais como uma questão de estética por hora. Quando criei o menu Visitar Site e implementei a ação da Intent Implicita, por que não foi implementado dentro de um onMenuItemClickListener, como o método deletar?

Eu consigo entender como estão funcionando, mas estéticamente parece que as coisas ficam meio "descontextualizadas"

Existe um motivo para essa implementação ou é apenas um preciosismo da minha parte?

Segue o código apenas para referência.

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {

        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);


    //Cria Item Visitar Site e Implementa a ação de Visitar site.
        MenuItem visitarSite = menu.add("Visitar site");
        Intent site = new Intent(Intent.ACTION_VIEW);

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

        site.setData(Uri.parse(siteAluno));
        visitarSite.setIntent(site);


    //Cria Item Deletar e Implementa a ação de deletar.
        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deleta(aluno);
                dao.close();

                carregaLista();
                return false;
            }
        });

    }

Agradeço a atenção.

2 respostas
solução!

Oi Marcelo, tudo bem ?

Esta maneira de chamar uma nova Activity, através do método setIntent, poderia ser implementado da mesma maneira que fazemos com a ação do deletar :



        MenuItem visitarSite = menu.add("Visitar site");
        visitarSite.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent site = new Intent(Intent.ACTION_VIEW);

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

                site.setData(Uri.parse(siteAluno));
                startActivity(site);
                return false;
            }
        });

Contudo repare que fazer isso para toda ação ia deixar o código bem ilegível, portanto eles já associaram o método setIntent para deixar o código mais limpo e nos economizar algumas linhas de código.

Espero ter deixado um pouco mais claro.

Abraços

Obrigado pela resposta Matheus.