How to take data from a Recyclerview item by clicking on it

Asked

Viewed 922 times

0

Good morning, everyone.

I’m populating a Recyclerview with data from a Firebase database. So far so good, it’s displaying everything correctly. My question is how I get the user id when clicking on the item. I know how to do if the id is in the layout, it’s easy, but otherwise I’m not getting it. Here are the classes:

Adapter

public class TecnicosAdapter extends RecyclerView.Adapter<TecnicosViewHolders>{

private List<TecnicosObject> tecnicosList;
private Context context;


public TecnicosAdapter (List<TecnicosObject> tecnicosList, Context context){
    this.tecnicosList = tecnicosList;
    this.context = context;
}

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

    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tecnicos, null, false);
    RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutView.setLayoutParams(lp);
    TecnicosViewHolders rcv = new TecnicosViewHolders((layoutView));

    return rcv;
}

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

    holder.mTecnicoNome.setText(tecnicosList.get(position).getNome());
    holder.mTecnicoProfissao.setText(tecnicosList.get(position).getProfissao());

    if (!tecnicosList.get(position).getImagemPerfilUrl().equals("default")){
        Glide.with(context).load(tecnicosList.get(position).getImagemPerfilUrl()).into(holder.mTecnicoImagem);
    }

}

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

}

Model

public class TecnicosObject {
private String usuarioId;
private String nome;
private String profissao;
private String imagemPerfilUrl;

public TecnicosObject(String usuarioId, String nome, String profissao, String imagemPerfilUrl) {

    this.usuarioId = usuarioId;
    this.nome = nome;
    this.profissao = profissao;
    this.imagemPerfilUrl = imagemPerfilUrl;

}

public String getUsuarioId() {
    return usuarioId;
}
public void setUsuarioId(String usuarioId) {
    this.usuarioId = usuarioId;
}

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

public String getProfissao() {
    return profissao;
}
public void setProfissao(String profissao) {
    this.profissao = profissao;
}

public String getImagemPerfilUrl() {
    return imagemPerfilUrl;
}
public void setImagemPerfilUrl(String imagemPerfilUrl) {
    this.imagemPerfilUrl = imagemPerfilUrl;
}

}

Viewholder

public class TecnicosViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {


public TextView mTecnicoNome, mTecnicoProfissao;
public ImageView mTecnicoImagem;


public TecnicosViewHolders(View itemView) {
    super(itemView);
    itemView.setOnClickListener(this);


    mTecnicoNome = (TextView) itemView.findViewById(R.id.TecnicoNome);
    mTecnicoProfissao = (TextView) itemView.findViewById(R.id.TecnicoProfissao);
    mTecnicoImagem = (ImageView) itemView.findViewById(R.id.TecnicoImagem);
}



@Override
public void onClick(View view) {

}

}

Main Class

public class TelaTecnicos extends AppCompatActivity {

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mTecnicosAdapter;
private RecyclerView.LayoutManager mTecnicosLayoutManager;

private String usuarioAtualID;

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

    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    usuarioAtualID = FirebaseAuth.getInstance().getCurrentUser().getUid();

    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    mRecyclerView.setNestedScrollingEnabled(false);
    mRecyclerView.setHasFixedSize(true);
    mTecnicosLayoutManager = new LinearLayoutManager(TelaTecnicos.this);
    mRecyclerView.setLayoutManager(mTecnicosLayoutManager);
    mTecnicosAdapter = new TecnicosAdapter(getDataSetTecnicos(), TelaTecnicos.this);
    mRecyclerView.setAdapter(mTecnicosAdapter);

    getUsuarioTecnicoId();

}

private void getUsuarioTecnicoId() {

    DatabaseReference tecnicoDb = FirebaseDatabase.getInstance().getReference().child("Usuarios").child(usuarioAtualID).child("conexoes").child("tecnicos");
    tecnicoDb.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                for (DataSnapshot tecnico: dataSnapshot.getChildren()){
                    FetchtecnicoInformation(tecnico.getKey());
                }
            }
        }

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

        }
    });

}

private void FetchtecnicoInformation(String key) {
    DatabaseReference usuarioDb = FirebaseDatabase.getInstance().getReference().child("Usuarios").child(key);
    usuarioDb.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                String usuarioId = dataSnapshot.getKey();
                String nome = "";
                String profissao = "";
                String imagemPerfilUrl = "";

                if (dataSnapshot.child("nome").getValue()!=null){
                    nome = dataSnapshot.child("nome").getValue().toString();
                }

                if (dataSnapshot.child("profissao").getValue()!=null){
                    profissao = dataSnapshot.child("profissao").getValue().toString();
                }

                if (dataSnapshot.child("imagemPerfilUrl").getValue()!=null){
                    imagemPerfilUrl = dataSnapshot.child("imagemPerfilUrl").getValue().toString();
                }


                TecnicosObject obj = new TecnicosObject(usuarioId, nome, profissao, imagemPerfilUrl);
                resultmTecnicos.add(obj);
                mTecnicosAdapter.notifyDataSetChanged();
            }
        }

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

        }
    });

}

private ArrayList<TecnicosObject> resultmTecnicos = new ArrayList<TecnicosObject>();
private List<TecnicosObject> getDataSetTecnicos() {

    return resultmTecnicos;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home){
        this.finish();
    }

    return super.onOptionsItemSelected(item);
}

}

I suppose it is possible to catch the userId by clicking on the item. Does anyone have any ideas? Thank you!

1 answer

0


Well, I managed to solve the problem. I merged the Viewholder in the Adapter class. If anyone has a similar question here is how the Adapter class looked:

public class TecnicosAdapter extends RecyclerView.Adapter<TecnicosAdapter.TecnicosViewHolders>{

    private List<TecnicosObject> tecnicosList;
    private Context context;


    public TecnicosAdapter (List<TecnicosObject> tecnicosList, Context context){
        this.tecnicosList = tecnicosList;
        this.context = context;

    }

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

        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tecnicos, null, false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);
        TecnicosViewHolders rcv = new TecnicosViewHolders((layoutView));


        return rcv;
    }


    public void onBindViewHolder(@NonNull TecnicosViewHolders holder, int position) {
     //   holder.mTecnicoId.setText(tecnicosList.get(position).getUsuarioId());
        holder.mTecnicoNome.setText(tecnicosList.get(position).getNome());
        holder.mTecnicoProfissao.setText(tecnicosList.get(position).getProfissao());

        if (!tecnicosList.get(position).getImagemPerfilUrl().equals("default")){
            Glide.with(context).load(tecnicosList.get(position).getImagemPerfilUrl()).into(holder.mTecnicoImagem);
        }



    }

    public TecnicosObject getItem(int position){
        return tecnicosList.get(position);
    }


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

    public class TecnicosViewHolders extends RecyclerView.ViewHolder {

        public TextView mTecnicoNome, mTecnicoProfissao;
        public ImageView mTecnicoImagem;
        private Context context;


        public TecnicosViewHolders(View itemView) {
            super(itemView);
            this.context = context;

            mTecnicoNome = (TextView) itemView.findViewById(R.id.TecnicoNome);
            mTecnicoProfissao = (TextView) itemView.findViewById(R.id.TecnicoProfissao);
            mTecnicoImagem = (ImageView) itemView.findViewById(R.id.TecnicoImagem);

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

                    String tecnicoId = "";

                    int pos = getAdapterPosition();

                    if (pos!=RecyclerView.NO_POSITION){

                        tecnicoId = tecnicosList.get(pos).getUsuarioId();
                        //System.out.println(tecnicoId);

                        Intent intent = new Intent(v.getContext(), TelaExibeTecnico.class);
                        Bundle b = new Bundle();
                        b.putString("tecnicoId", tecnicoId.toString());
                        intent.putExtras(b);
                        v.getContext().startActivity(intent);

                    }

                }
            });

        }

    }

}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.