Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Dúvida no Ex. 2 da Aula 5 - Editando alunos

O exercício está errado. No enunciado indica para utilizar a função onItemSelected.. e esta era para caso usasse XML.. inclusive na resposta depois de dar Ok não utiliza a função.

Já minha dúvida mesmo é em relação ao final, aqui no código o compilador dava erro se aluno não fosse final.. Eqt para o adapter não tinha problema. Por que isso?

10 respostas

Ola Daniel !

Poderia postar esse trecho do código que esta com dúvida ?

Abraço !

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

        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();

                //Toast.makeText(ListaAlunosActivity.this, "Aluno " + aluno.getNome() + " deletado!", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }

Esta é a forma que o meu compilador aceitou. No caso do vídeo foi diferente, sendo o final no param da função, e na resposta do exercício no site diferente também, onde o final estava na referência do adapter.

Certo,

Essa é uma dúvida de java e não de Android.

O compilador exige esse final no seu

final Aluno aluno = (Aluno)...

Porque ele esta sendo usado dentro de uma implementação de uma classe anônima.

Ao executar esse new abaixo:

deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

Você esta fazendo uma implementação de uma classe anônima, ou seja, esta simplesmente instanciando uma classe, assim como você faz com qualquer outra. Mas o fato de ter q usar o final é para garantir que a instancia do seu Aluno não sofra alterações, afinal de contas vc esta passando a instancia do seu aluno para uma nova instancia(no caso a classe anônima que vc acabou te instanciar).

Da uma olhadinha em Classe anônima de java. É um assunto muito legal.

Ajudei a esclarecer ?

Abraço!

Sim, mas por que no vídeo da aula não precisou em aluno e sim em lugar diferente?

Comecei a ver aqui classe anônima é bacana mesmo. Java e android é novo pra mim.

Daniel,

No video ele esta usando uma classe Helper ?

Aqui no trabalho nao consigo abrir o video.... rs...

solução!

Fui pegar a resposta desse exercício e ela está assim:

public class ListaAlunosActivity extends AppCompatActivity {
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
        final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public void onMenuItemClick(MenuItem item) {
                AlunoDao dao = new AlunoDao(ListaAlunosActivity.this);
                dao.delete(aluno);
                dao.close();

                carregaLista();
                return false;
            }
        });
    }
}

Como a variável usada na classe anônima é o aluno, de fato, o final tem que ser o aluno em vez do AdapterContextMenuInfo.

Vou alterar esse exercício. Valeu pela dica, Daniel!

Opa, legal!

;)

Qualquer coisa que parecer estranha, pode dar um toque, abrir um outro tópico, sem problemas... ;)

Eu já achei umas pequenas coisas, mas coloquei nas respostas dos exercícios, vocês tem acesso? Pequenos detalhes assim, as maiorzinhas trouxe pro fórum mesmo. =]

Temos sim. ;)