GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como atribuir RecyclerView dentro de outro RecyclerView?

Tags: #<Tag:0x00007f68c8096360> #<Tag:0x00007f68c8095c30> #<Tag:0x00007f68c8095820>

Tenho um RecyclerView, onde direciona para outra página, nessa outra página quero colocar outro RecyclerView onde os atributos irá para cada posição diferente do primeiro RecyclerView.

ou seja, no primeiro RecyclerView irá atribuir o nome do treino, será direcionado para a outra página, na outra página terá outro RecyclerView onde ele definirá os dias da semana, porém teria que ser salvo somente em uma posição do RecyclerView.

Exemplo, Criou Treino A e Treino B, ao clicar em treino A irá para outra página, onde irá criar os dias da semana no RecyclerView, porem tem que ser atribuído somente ao treino A. Pois no treino B ele poderia criar de outro jeito os dias da semana, porém meu código quando atribuo em 1 automaticamente atribui em todos os treinos.

Poderiam me ajudar, me dar pelo menos um norte de como resolver esse problema.

Mostra aí os códigos relevantes.

Segue código activity monttreino:

public class MontTreino extends AppCompatActivity {

private RecyclerView recyclerTreino;
private AdapterTreination adapterTreination;
private List<Treination> treination = new ArrayList<>();

private FloatingActionButton adicionarTreino;

private DatabaseReference movimentacaoRef;
private DatabaseReference treinoRef = ConfiguracaoFirebase.getFirebaseDatabase();
private ValueEventListener valueEventListenerTreinos;

private FirebaseAuth autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();

Dialog dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mont_treino);

    recyclerTreino = findViewById(R.id.recyclerTreino);
    adicionarTreino = findViewById(R.id.adicionarTreino);


    //Configurar Layout
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    recyclerTreino.setLayoutManager(layoutManager);

    //Configurar Adapter
    this.salvarTreino();
    adapterTreination = new AdapterTreination(treination, this);
    recyclerTreino.setAdapter(adapterTreination);

    recyclerTreino.addOnItemTouchListener(new RecyclerItemClickListener(
            MontTreino.this,
            recyclerTreino,
            new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {

                    Treination treinoSelecionado = treination.get(position);
                    Intent intent = new Intent(MontTreino.this, PagTreino.class);
                    intent.putExtra("treinoSelecionado", treinoSelecionado);
                    startActivity(intent);

                }

                @Override
                public void onLongItemClick(View view, int position) {



                }

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {



                }
            }
    ));

    adicionarTreino.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            montTreino();

            dialog.show();

        }
    });

}
private void montTreino(){

    dialog = new Dialog(MontTreino.this);
    dialog.setContentView(R.layout.treino);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {


    }
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    dialog.setCancelable(false);
    dialog.getWindow().getAttributes().windowAnimations = R.style.ShapeAppearanceOverlay_MaterialComponents_MaterialCalendar_Window_Fullscreen;

    TextView adicionar = dialog.findViewById(R.id.adicionar_d);
    EditText treino = dialog.findViewById(R.id.edit_treino);
    EditText observacoes = dialog.findViewById(R.id.observacoes);


    adicionar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String emailUsuario = autenticacao.getCurrentUser().getEmail();
            String idUsuario = Base64Custom.codificarBase64(emailUsuario);

            String texto = treino.getText().toString();
            String observa = observacoes.getText().toString();

            Treination treination = new Treination();

            treination.setTexto(texto);

            treination.salvarTreino();

            Intent intent = new Intent(MontTreino.this, PagTreino.class);
            startActivity(intent);

            dialog.dismiss();

        }
    });

}
private void salvarTreino(){

    String emailUsuario = autenticacao.getCurrentUser().getEmail();
    String idUsuario = Base64Custom.codificarBase64(emailUsuario);
    movimentacaoRef = treinoRef.child("Salvar Nomes")
            .child("Treino")
            .child(idUsuario);

    valueEventListenerTreinos = movimentacaoRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            treination.clear();
            for (DataSnapshot ds : snapshot.getChildren()){

                Treination treinations = ds.getValue(Treination.class);
                treination.add(treinations);

            }

            adapterTreination.notifyDataSetChanged();

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

}

Segue Código AdapterTreination

public class AdapterTreination extends RecyclerView.Adapter<AdapterTreination.MyViewHolder> {

private List<Treination> treination;

public AdapterTreination(List<Treination> treinations, MontTreino montTreino) {

    this.treination = treinations;

}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View itemLista = LayoutInflater.from(parent.getContext())
    .inflate(R.layout.salvarmonttreino, parent, false);

    return new AdapterTreination.MyViewHolder(itemLista);

}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

    Treination treinatios = treination.get(position);

    holder.texto.setText((String) treinatios.getTexto());
    holder.halter.setImageResource(R.drawable.halter);
    holder.close.setImageResource(R.drawable.ic_close);

}

@Override
public int getItemCount() {
    return treination.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder{

    private TextView texto;
    private ImageView halter;
    private ImageView close;


    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        texto = itemView.findViewById(R.id.text_salva);
        halter = itemView.findViewById(R.id.treino);
        close = itemView.findViewById(R.id.edit2);


    }
}

}

Segue código Treination

public class Treination implements Serializable {

private String texto;
private String observacoes;

public String getTexto() {
    return texto;
}

public void setTexto(String texto) {
    this.texto = texto;
}

public String getObservacoes() {
    return observacoes;
}

public void setObservacoes(String observacoes) {
    this.observacoes = observacoes;
}

public Treination() {

}

public Treination(String texto, String observacoes) {
    this.texto = texto;
    this.observacoes = observacoes;

}

public void salvarTreino() {

    FirebaseAuth autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();
    String idUsuario = Base64Custom.codificarBase64(autenticacao.getCurrentUser().getEmail());

    DatabaseReference firebase = ConfiguracaoFirebase.getFirebaseDatabase();
    firebase.child("Salvar Nomes")
            .child("Treino")
            .child(idUsuario)
            .push()
            .setValue(this);

}

}

Activity que direciona as informações:

public class PagTreino extends AppCompatActivity {

private Treination treinoSelecionado;
private TextView titulo_t;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pag_treino);

    titulo_t = findViewById(R.id.titulo_t);

    Bundle bundle = getIntent().getExtras();
    if (bundle != null){

        treinoSelecionado = (Treination) bundle.getSerializable("treinoSelecionado");

        titulo_t.setText(treinoSelecionado.getTexto());

    }

}

}

AdapterActivity redirecionada:

ublic class AdapterSegAlimentacao extends RecyclerView.Adapter<AdapterSegAlimentacao.MyViewHolder> {

private List<SegAlimentations> segundas;

public AdapterSegAlimentacao(List<SegAlimentations> segundas, PagAlimentation pagAlimentation) {

    this.segundas = segundas;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemLista = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.segundaaliment, parent, false);

    return new AdapterSegAlimentacao.MyViewHolder(itemLista);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

    SegAlimentations segAlimentations = segundas.get(position);

    holder.segund.setImageResource(R.drawable.segunda);
    holder.close.setImageResource(R.drawable.ic_close);
    holder.nomeTreino.setText(segAlimentations.getNome());
    holder.historico.setText(segAlimentations.getHistorico());
    holder.observ.setText(segAlimentations.getObservacoes());


}

@Override
public int getItemCount() {
    return segundas.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder{

    private ImageView segund;
    private TextView nomeTreino;
    private TextView historico;
    private TextView observ;
    private ImageView close;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        segund = itemView.findViewById(R.id.icm);
        nomeTreino = itemView.findViewById(R.id.texticm_m);
        historico = itemView.findViewById(R.id.pesagem);
        observ = itemView.findViewById(R.id.peso_p);
        close = itemView.findViewById(R.id.close);


    }
}

}

Model:
public class SegAlimentations implements Serializable {

private String nome;
private String historico;
private String observacoes;

public SegAlimentations() {

}

public SegAlimentations(String nome, String historico, String observacoes) {

    this.nome = nome;
    this.historico = historico;
    this.observacoes = observacoes;

}
public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getHistorico() {
    return historico;
}

public void setHistorico(String historico) {
    this.historico = historico;
}

public String getObservacoes() {
    return observacoes;
}

public void setObservacoes(String observacoes) {
    this.observacoes = observacoes;
}


public void segundaSalvar() {

    FirebaseAuth autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();
    String idUsuario = Base64Custom.codificarBase64(autenticacao.getCurrentUser().getEmail());

    DatabaseReference firebase = ConfiguracaoFirebase.getFirebaseDatabase();
    firebase.child("Semanas Alimentacao")
            .child("Dias Semanas")
            .child(idUsuario)
            .push()
            .setValue(this);



}

}

Aqui não teria que ter um “treino A”, “treino B”, etc?


E um detalhe: Treination não é uma palavra, treino em inglês seria Training ou Exercise.

Então, treino A e treino B são exemplos, a pessoa que escolhe o nome, e é salvo como push. o identificador do firebase, cada push seria nome de um treino que o usuário definiu, e la dentro ele escolheria os dias da semana.

Certo.
Mas onde você está salvando os dias dentro desse treino?
Teria que usar o nome para fazer a distinção.

Sabe me dizer como faria para usar o nome?

“texto” é o nome que o usuário escolhe?
Acho que poderia ser child(texto)

Na verdade, o usuário escolhe o nome com um EditText, ai eu salvo com getTexto().

//