Solucionado (ver solução)
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. ;)