In my app I have a recyclerView with elements from a Firestore database. I want by clicking on an element in the recyclerView (which is inside a fragment) to pass the data of the element to another activity. I've tried several solutions but none seem to work and I'm stuck. Please help me.
Adapter Class
public class InfoElementAdapter extends FirestoreRecyclerAdapter<InfoElement, InfoElementAdapter.InfoElementHolder> {
String urlImg;
public InfoElementAdapter(@NonNull FirestoreRecyclerOptions<InfoElement> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull InfoElementHolder holder, int position, @NonNull InfoElement model) {
holder.textViewNomeRest.setText(model.getNome());
holder.textViewDescrRest.setText(model.getDescrizione());
urlImg = model.getUrlImg();
Glide.with(holder.itemView.getContext()).load(urlImg).into(holder.imageView);
}
@NonNull
@Override
public InfoElementHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_single, parent, false );
return new InfoElementHolder(v) ;
}
class InfoElementHolder extends RecyclerView.ViewHolder {
TextView textViewNomeRest;
TextView textViewDescrRest;
ImageView imageView;
public InfoElementHolder(@NonNull View itemView) {
super(itemView);
textViewNomeRest = itemView.findViewById(R.id.txt_v_nome);
textViewDescrRest = itemView.findViewById(R.id.txt_v_descrizione);
imageView = itemView.findViewById(R.id.imageV);
}
}
}
Fragment with the recyclerView
public class RestaurantFragment extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference restaurantRef = db.collection("restaurant_db");
private InfoElementAdapter adapter;
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_restaurant, container, false);
setUpRecyclerView();
return view;
}
private void setUpRecyclerView() {
Query query = restaurantRef.orderBy("nome", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<InfoElement> options = new FirestoreRecyclerOptions.Builder<InfoElement>()
.setQuery(query, InfoElement.class)
.build();
adapter = new InfoElementAdapter(options);
RecyclerView recyclerView = view.findViewById(R.id.firestore_list1);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(Tools.getGridSpanCount(getActivity()), StaggeredGridLayoutManager.VERTICAL));
recyclerView.addItemDecoration(new Tools.SpacingItemDecoration(Tools.getGridSpanCount(getActivity()), Tools.dpToPx(getActivity(), 4),true));
recyclerView.setAdapter(adapter);
}
@Override
public void onStart() {
super.onStart();
adapter.startListening();
}
@Override
public void onStop() {
super.onStop();
if (adapter != null) {
adapter.stopListening();
}
}
}
InfoElement Class
public class InfoElement {
private String nome;
private String descrizione;
private String urlImg;
public InfoElement() {
}
public InfoElement(String nome, String descrizione, String urlImg) {
this.nome = nome;
this.descrizione = descrizione;
this.urlImg = urlImg;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public String getUrlImg() {
return urlImg;
}
public void setUrlImg(String urlImg) {
this.urlImg = urlImg;
}
public String getNome() {
return nome;
}
public String getDescrizione() {
return descrizione;
}
}
You can change onBindViewHolder
by setting up a click listener for the ViewHolder itemView
, and add your data object with putExtra
, and retrieve it with getIntent().getSerializableExtra
at the target activity.
@Override
protected void onBindViewHolder(@NonNull InfoElementHolder holder, int position, @NonNull InfoElement model) {
holder.textViewNomeRest.setText(model.getNome());
holder.textViewDescrRest.setText(model.getDescrizione());
urlImg = model.getUrlImg();
Glide.with(holder.itemView.getContext()).load(urlImg).into(holder.imageView);
holder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(), ActivityB.class);
intent.putExtra("MyData", myData);
startActivity(intent);
}
});
}
To retrieve the data at the target Activity
getIntent().getSerializableExtra("MyData");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.