Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aluno com foto errada na lista

Aula 3 - Depois de atribuir o valor da convertView e fazer o if, o primeiro aluno da minha lista, que não tem caminho de foto no banco, aparece na lista com a mesma foto do último aluno da lista. Minha lista tem apenas 7 alunos. Fiz alguns testes para tentar descobrir o que houve, mas só descobri que esse primeiro aluno passa 2 vezes pelo if (os demais passam apenas 1).

@Override
    public View getView(int position, View contentView, ViewGroup parent) {

        Aluno aluno = alunos.get(position);

        LayoutInflater inflater = LayoutInflater.from(context);

        View view = contentView;

        if(view == null) { 
            view = inflater.inflate(R.layout.list_item, parent, false);
        }


        TextView campoNome = (TextView) view.findViewById(R.id.item_nome);
        campoNome.setText(aluno.getNome());

        TextView campoTelefone = (TextView) view.findViewById(R.id.item_telefone);
        campoTelefone.setText(aluno.getTelefone());

        ImageView campoFoto = (ImageView) view.findViewById(R.id.item_foto);
        String caminhofoto = aluno.getCaminhoFoto();
        if(caminhofoto != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(caminhofoto);
            Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
            campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
            campoFoto.setImageBitmap(bitmapReduzido);
        }

        return view;
    }
1 resposta
solução!

Oi Laura, tudo bem ?

Como você está reaproveitando a view, através do if, ele reaproveita o estado inteiro dela, todas as views dentro dela.

Repara que você re-popula todos os campos, exceto a imagem, que você faz uma validação para ver se ele tem foto ou não. Como não possui, não coloca nada no ImageView, contudo o último aluno tinha foto, logo você esqueceu de limpar o estado desse campo, para isso, basta você fazer um else :

if(caminhofoto != null) {
    Bitmap bitmap = BitmapFactory.decodeFile(caminhofoto);
    Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
    campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
    campoFoto.setImageBitmap(bitmapReduzido);
} else {
    // faz comportamento para deixar uma imagem vazia
}

Não passei o comportamento de deixar a imagem vazia, porque creio que você consiga fazer com o ensinamento do curso, mas se tiver qualquer dúvida pode falar que estou a disposição

Espero ter ajudado.

Abraços e bons estudos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software