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

Exception dispatching input event.

Olá,

Após realizar as alterações finais para a migração do ArrayAdapter para o Adapter, como sugerido na aula 1 da parte 3 do curso de Android. Percebi que a opção "Remove" não esta funcionando.

Na tentativa de resolver o problema, olhei o LogCat e percebi que ao usar a opção "remover" que chama o método "remove" de outra classe, ocorre a " Exception dispatching input event".

Alguém poderia me informar como corrigir essa excecção?

Codigo da classe principal:

package com.curso.android.agenda.ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.curso.android.agenda.R;
import com.curso.android.agenda.dao.AlunoDAO;
import com.curso.android.agenda.model.Aluno;
import com.curso.android.agenda.ui.adapter.ListaDeAlunoAdapter;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.List;

import static com.curso.android.agenda.ui.activity.ConstantesActivities.CHAVE_ALUNO;


public class ListaAlunosActivity extends AppCompatActivity {

    public static final String TITULO_APPBAR = "Lista de Alunos";
    private final AlunoDAO dao = new AlunoDAO();
    private ListaDeAlunoAdapter adapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_aluno);
        setTitle(TITULO_APPBAR);
        configuraFabNovoAluno();
        configuraLista();
        dao.salva(new Aluno("Amanda", "111110000", "Amanda@emial.com"));
        dao.salva(new Aluno("Ananda", "222220000", "ananda@email.com"));
        dao.salva(new Aluno("Heleno", "333330000", "heleno@email.com"));

    }
Classe onde o método "remove" está localizado:
package com.curso.android.agenda.ui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.curso.android.agenda.R;
import com.curso.android.agenda.model.Aluno;

import java.util.ArrayList;
import java.util.List;

public class ListaDeAlunoAdapter extends BaseAdapter {
    private final List<Aluno> alunos = new ArrayList<>();
    private Context context;

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

    @Override
    public int getCount() {
        return alunos.size();
    }

    @Override
    public Aluno getItem(int posicao) {
        return alunos.get(posicao);
    }

    @Override
    public long getItemId(int posicao) {
        return alunos.get(posicao).getId();
    }

    @Override
    public View getView(int posicao, View view, ViewGroup viewGroup) {
        View viewCriada = LayoutInflater.from(context).inflate(R.layout.item_aluno, viewGroup, false);
        Aluno alunoDevolvido = alunos.get(posicao);
        TextView nome = viewCriada.findViewById(R.id.item_aluno_nome);
        nome.setText(alunoDevolvido.getNome());
        TextView telefone = viewCriada.findViewById(R.id.item_aluno_telefone);
        telefone.setText(alunoDevolvido.getTelefone());
        return viewCriada;
    }

    public void clear() {
        alunos.clear();
    }

    public void addAll(List<Aluno> aluno) {
       this.alunos.addAll(aluno);
    }

    public void remove(Aluno aluno) {
        alunos.remove(aluno);
    }
}

Desde já agradeço!

1 resposta
solução!

Se você também estiver com esse problema, saiba que é normal e que realmente deveria acontecer. Isso porque apesar de ter notificado o dataset, o adapter não foi notificado da mudança que ocorre ao remover um item, e por isso esse erro acontece.

Porém, isso já era esperado e será resolvido na aula 2 da parte 3 do curso. Apesar do professor não deixar claro durante a aula anterior que esse problema iria acontecer.