Estou criando um app de metas no qual registro uma meta com nome, o que fazer em cada semana, início e dia de realizar a atividade da semana. Desse modo, crio um ListView
no qual aparece o nome da meta e, quando o item é clicado, deveria imprimir um ArrayList
com as informações de cada semana. O problema é que quando eu seleciono o item, na tela que deveria exibir todas as semanas, aparece somente a primeira. Gostaria de saber como fazer aparecer todas as semanas registradas no EditText
da meta.
O código: Meta.Java
public class Meta implements Serializable {
private String id;
private String metaSemestre;
private String Data;
private String Dia;
private List<String> semanas;
public List<String> getSemanas() {
return semanas;
}
public void setSemanas(List<String> semanas) {
this.semanas = semanas;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMetaSemestre() {
return metaSemestre;
}
public void setMetaSemestre(String metaSemestre) {
this.metaSemestre = metaSemestre;
}
public String getData() {
return Data;
}
public void setData(String data) {
this.Data = data;
}
public String getDia() {
return Dia;
}
public void setDia(String dia) {
this.Dia = dia;
}
@NonNull
@Override
public String toString() {
return metaSemestre;
}
}
MetaFB.Java
public class MetaFB {
private FirebaseDatabase database;
private DatabaseReference metas;
private DatabaseReference semanas;
public MetaFB() {
database = FirebaseDatabase.getInstance();
metas = database.getReference("metas");
semanas = database.getReference("semanas");
}
public HashMap<String, Object> toMap(Meta meta) {
HashMap<String,Object> result = new HashMap<>();
result.put("id", meta.getId());
result.put("metaSemestre", meta.getMetaSemestre());
result.put("data", meta.getData());
result.put("dia", meta.getDia());
result.put("semanas", meta.getSemanas());
return result;
}
public void save(Meta meta) {
meta.setId(metas.push().getKey());
update(meta);
}
void update(Meta meta) {
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(meta.getId(), toMap(meta));
metas.updateChildren(childUpdates);
}
public void remove(Meta meta) {
metas.child(meta.getId()).removeValue();
}
}
Semana.Java
public class Semana implements Serializable {
private String id;
private Meta meta;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Meta getMeta() {
return meta;
}
public void setMeta(Meta meta) {
this.meta = meta;
}
@NonNull
@Override
public String toString() {
return id;
}
MinhasMetasActivity.java
public class MetaFB {
private FirebaseDatabase database;
private DatabaseReference metas;
private DatabaseReference semanas;
public MetaFB() {
database = FirebaseDatabase.getInstance();
metas = database.getReference("metas");
semanas = database.getReference("semanas");
}
public HashMap<String, Object> toMap(Meta meta) {
HashMap<String,Object> result = new HashMap<>();
result.put("id", meta.getId());
result.put("metaSemestre", meta.getMetaSemestre());
result.put("data", meta.getData());
result.put("dia", meta.getDia());
result.put("semanas", meta.getSemanas());
return result;
}
public void save(Meta meta) {
meta.setId(metas.push().getKey());
update(meta);
}
void update(Meta meta) {
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(meta.getId(), toMap(meta));
metas.updateChildren(childUpdates);
}
public void remove(Meta meta) {
metas.child(meta.getId()).removeValue();
}
}
CheckListSemanas.java
public class CheckListSemanaActivity extends AppCompatActivity {
private ListView listaSemanas;
private List<String> semanas;
private DatabaseReference fb;
private ValueEventListener valueEventListener;
private ArrayAdapter<String> semanaArrayAdapter;
private Meta meta;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_list_semana);
listaSemanas = findViewById(R.id.lista_semanas);
meta = (Meta) getIntent().getSerializableExtra("meta");
semanas = meta.getSemanas();
semanaArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, semanas);
listaSemanas.setAdapter(semanaArrayAdapter);
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
semanas.clear();
for (DataSnapshot data : dataSnapshot.getChildren()) {
Meta meta = data.getValue(Meta.class);
semanas.add(String.valueOf(meta));
}
semanaArrayAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
registerForContextMenu(listaSemanas);
}
}