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

Filtro no Adapter

Olá, pessoal.

Em um projeto para cadastro de visitas, estou testando um filtro no adapter para aparecer somente as que estão com o campo "turno" setado como "manhã", por exemplo.

Para teste, já tenho algumas visitas cadastradas no DAO e elas aparecem no adapter normalmente (se utilizo o filtro, aparecem somente as que cadastrei com o turno manhã. Caso retiro o filtro, todas aparecem).

O problema é quando eu cadastro uma visita nova: meu adapter não está atualizando quando utilizo esse filtro. O filtro está assim:

    public void atualiza(List<Visita> visitas) {
        List<Visita> visitas_filtradas = new ArrayList<>();
        for (int i = 0; i < visitas.size(); i++) {
            if (visitas.get(i).getTurno() == "Manhã")
                visitas_filtradas.add(visitas.get(i));
        }
        this.visitas.clear();
        this.visitas.addAll(visitas_filtradas);
        notifyDataSetChanged();
    }

Quando eu retiro o filtro (código abaixo), ao cadastrar uma nova visita, ela aparece:

    public void atualiza(List<Visita> visitas) {
        this.visitas.clear();
        this.visitas.addAll(visitas);
        notifyDataSetChanged();
    }

No Main, o código está assim:


public class MainActivity extends AppCompatActivity {

    private static final String TITULO_APPBAR = "Lista de visitas";
    private final ListaVisitasView listaVisitasView = new ListaVisitasView(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_visita);
        setTitle(TITULO_APPBAR);
        configuraLista();
        configuraBotaoCadastroVisita();
        configuraBotaoCadastroUnidade();
        configuraBotaoMainActivity();
    }
//DEMAIS CÓDIGO

@Override
    protected void onResume() {
        super.onResume();
        listaVisitasView.atualizaVisitas();
    }

    private void configuraLista() {
        ListView listaDeVisitas = findViewById(R.id.lista_visitas_listview);
        listaVisitasView.configuraAdapter(listaDeVisitas);
        registerForContextMenu(listaDeVisitas);
    }

ListView:

public class ListaVisitasView {

    private final ListaVisitasAdapter adapter;
    private final VisitaDAO dao;
    private final Context context;

    public ListaVisitasView(Context context) {
        this.context = context;
        this.adapter = new ListaVisitasAdapter(this.context);
        this.dao = new VisitaDAO();
    }

    public void atualizaVisitas() {
        adapter.atualiza(dao.todos());
    }

    public void configuraAdapter(ListView listaDeVisitas) {
        listaDeVisitas.setAdapter(adapter);
    }

}

E o adapter:

public class ListaVisitasAdapter extends BaseAdapter {

    private final List<Visita> visitas = new ArrayList<>();
    private final Context context;

//DEMAIS CÓDIGO

@Override
    public View getView(int posicao, View view, ViewGroup viewGroup) {
        View viewCriada = criaView(viewGroup);
        Visita visita = visitas.get(posicao);
        vincula(viewCriada, visita);
        return viewCriada;
    }

    private View criaView(ViewGroup viewGroup) {
        return LayoutInflater.from(context)
                .inflate(R.layout.item_visita, viewGroup, false);
    }

private void vincula(View view, Visita visita)......

public void atualiza(List<Visita> visitas) {
        List<Visita> visitas_filtradas = new ArrayList<>();
        for (int i = 0; i < visitas.size(); i++) {
            if (visitas.get(i).getTurno() == "Manhã")
                visitas_filtradas.add(visitas.get(i));
        }
        this.visitas.clear();
        this.visitas.addAll(visitas_filtradas);
        notifyDataSetChanged();
    }


}
1 resposta
solução!

Esqueci e usei == no lugar de equals (rsrs)