1
resposta

O uso do viewHolder

Seguindo o post indicado na aula, ele informa que é necessario o uso de um ViewHolder para que o codigo compilasse, porem, sem ele o meu código se mantem sem erros. Não entendi o motivo. em seguida o meu Adapter:

public class ListaAlunosAdapter extends BaseAdapter {

    private final List<Aluno> alunos = new ArrayList<>();
    private final Context context;
    private Aluno aluno;
    private TextView txtNome;
    private TextView txtTelefone;

    public ListaAlunosAdapter(Context context) {
        this.context = context;
    }

    //retorna a quantidade de elementos que o adapter terá
    @Override
    public int getCount() {
        return alunos.size();
    }

    //retorna o elemento selecionado
    @Override
    public Aluno getItem(int position) {
        return alunos.get(position);
    }

    //retorna o id do elemento selecionado
    @Override
    public long getItemId(int position) {
        return alunos.get(position).getId();
    }

    //cria a nova view para cada elemento
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View viewCriada;

        if(convertView ==null){
            viewCriada = criarCard(parent);
            vinculaTextView(viewCriada);
        }else{
            viewCriada = convertView;
        }

        aluno = alunos.get(position);
        preencheTextView(aluno, viewCriada);

        return viewCriada;
    }

    private void vinculaTextView(View viewCriada){
        txtNome = viewCriada.findViewById(R.id.card_aluno_lista_alunos_nome);
        txtTelefone = viewCriada.findViewById(R.id.card_aluno_lista_alunos_telefone);
    }
    private void preencheTextView(Aluno aluno, View viewCriada) {
        txtNome.setText(aluno.getNome());
        txtTelefone.setText(aluno.getTelefone());
    }

    private View criarCard(ViewGroup parent) {
        return LayoutInflater.from(context).
                inflate(R.layout.card_aluno_lista_alunos, parent, false);
    }

   public void atualizaAdapter(List<Aluno> alunos){
        this.alunos.clear();
        this.alunos.addAll(alunos);
        notifyDataSetChanged();
   }

    public void remove(Aluno aluno) {
        this.alunos.remove(aluno);
        notifyDataSetChanged();
    }
}
1 resposta

Oi João, tudo bem? Não compilar depende muito de como o código está sendo feito, portanto, se da forma que fez, foi diferente do conteúdo do post, realmente não vai aparecer o problema mencionado.

Sobre o uso do ViewHolder, é importante para o conteúdo visual de cada view dos itens seja isolado. Dessa forma, evita bugs, como por exemplo, a view de posição 1 ter o conteúdo da posição 2 porque a view do item anterior estava acessível em nível de adapter.

Um outro detalhes bacana do ViewHolder é que você pode encapsular comportamentos também, portanto, o adapter não precisa ficar responsável em atribuir valores ou regras de negócio na view.

[]s