Dynamically fill ArrayList ANDROID STUDIO

0

The main screen of my app is composed of some sessions using RecyclerView. For the adapter of my recyclerview I pass an arraylist of the type Sessoes so that the screen stays the way I want. But this arraylist I can only fill statically. I'd like to populate it dynamically just by adding a field in the firebase, so I do not have to tinker with the code each time I want to add or delete a session. Below follow the screen and the codes. I use firebase as a backend.

Sessions Class:

public class Sessoes {
private String nomeSessao;
private String descricaoSessao;
private String nomeSessaoBD;
private String img;

public Sessoes (){

}

public Sessoes(String nome, String desc, String nomeBD){
    nomeSessao = nome;
    descricaoSessao = desc;
    nomeSessaoBD = nomeBD;
}

public String getNomeSessao() {
    return nomeSessao;
}

public void setNomeSessao(String nomeSessao) {
    this.nomeSessao = nomeSessao;
}

public String getDescricaoSessao() {
    return descricaoSessao;
}

public void setDescricaoSessao(String descricaoSessao) {
    this.descricaoSessao = descricaoSessao;
}

public String getNomeSessaoBD() {
    return nomeSessaoBD;
}

public void setNomeSessaoBD(String nomeSessaoBD) {
    this.nomeSessaoBD = nomeSessaoBD;
}

public String getImg() {
    return img;
}

public void setImg(String img) {
    this.img = img;
    }
}

Arraylist fill-in code:

public List<Sessoes> todasAsSessoes() {

    List<Sessoes> sessoes = new ArrayList<>();

    Sessoes sessoes_1 = new Sessoes("Próxima Ação","Informações sobre a próxima ação a ser realizada.", "proxima_acao" );
    Sessoes sessoes_2 = new Sessoes("Galeria", "Fotos das ações já realizadas.", "galeria");
    Sessoes sessoes_3 = new Sessoes("Quero Participar", "Quer ser voluntário em alguma ação?", "quero_participar");
    Sessoes sessoes_4 = new Sessoes("Quero Doar", "O que você quer doar?", "quero_doar");
    Sessoes sessoes_5 = new Sessoes("Calendário", "Confira o calendário das nossas ações.", "calendario");
    Sessoes sessoes_6 = new Sessoes("Locais atendidos", "Confira os locais já visitados pelo Doe Amor", "locais_atendidos");
    Sessoes sessoes_7 = new Sessoes("Contatos","Fale conosco!", "contatos");
    Sessoes sessoes_8 = new Sessoes("Redes Sociais", "Junte-se a nós e espalhe o amor pelas suas redes", "redes_sociais");

    Sessoes[] sessoesAdd = {sessoes_1, sessoes_2, sessoes_3, sessoes_4, sessoes_5, sessoes_6, sessoes_7, sessoes_8};

    for (int i=0 ; i <sessoesAdd.length ; i++){
        sessoes.add(sessoesAdd[i]);        }

    return sessoes;
}

It's just this code above that I need to change to be populated dynamically.

Arraylist pass code for recyclerview adapter:

 sessoes = todasAsSessoes();

    recyclerView = (RecyclerView) findViewById(R.id.recycler);

    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);

    recyclerView.setLayoutManager(layoutManager);

    AdapterSessoes adapter = new AdapterSessoes(sessoes, this);

    recyclerView.setAdapter(adapter);

    recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

Screen how the sessions are arranged:

    
asked by anonymous 08.10.2018 / 14:42

1 answer

0

Come on ...

The first thing in mind is having to load Firebase data.

Remembering that this is not the best way to access your database. Only the fastest implementation point of view.

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

            ...
           ValueEventListener listener = new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
                   for(DataSnapshot snapshot : dataSnapshot) {
                       mListaSessoes.add(snapshot.getValue(Sessao.class));
                   }
                   mSessaoAdapter.setListaSessoes(mListaSessoes);           
              }
              @Override
              public void onCancelled(DatabaseError databaseError) {
                  // Aconteceu algo de errado
              }
           };
           mFirebaseReference.child("sessoes")
                 .addValueEventListener(listener);
        }
    }

Then have your adapter initialize the session list by a setter

public void setListaSessoes(@NonNull ArrayList<Sessao> listaSessoes) {
       this.sessoes = listaSessoes;
}
    
08.10.2018 / 23:28