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();
}
}