My project uses Firebase Firestore UI
in order to show collections using RecyclerView
+ CardView
combo in a fragment, I've used adapter provided by FirestoreUI
itself.
FirestoreRecyclerAdapter
However, I'm unable to set an onItemClickListener
on every card which shows up.
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Record, recordViewHolder>(options) {
@Override
public void onDataChanged() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError(@NonNull FirebaseFirestoreException e) {
Log.e(TAG, "onError: ", e);
}
@Override
protected void onBindViewHolder(@NonNull recordViewHolder holder, int position, @NonNull Record record) {
holder.date.setText(String.valueOf(record.getFullDate()));
holder.qty.setText(String.valueOf(record.getQty()));
holder.rate.setText(String.valueOf(record.getRate()));
holder.total.setText(String.valueOf(record.getTotal()));
holder.milkType.setText(String.valueOf(record.getMilkType()));
}
@NonNull
@Override
public recordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.record_logs_card, parent, false);
return new recordViewHolder(view, mListener);
}
};
Setting onItemClickListener
like this results in a huge mess of syntactical error.
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Record, recordViewHolder>(options, setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});) {
@Override
public void onDataChanged() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError(@NonNull FirebaseFirestoreException e) {
Log.e(TAG, "onError: ", e);
}
@Override
protected void onBindViewHolder(@NonNull recordViewHolder holder, int position, @NonNull Record record) {
holder.date.setText(String.valueOf(record.getFullDate()));
holder.qty.setText(String.valueOf(record.getQty()));
holder.rate.setText(String.valueOf(record.getRate()));
holder.total.setText(String.valueOf(record.getTotal()));
holder.milkType.setText(String.valueOf(record.getMilkType()));
}
@NonNull
@Override
public recordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.record_logs_card, parent, false);
return new recordViewHolder(view, mListener);
}
};
How do I actually set onItemClickListener
, when the adapter is itself a variable rather than an extended class of RecyclerAdapter
and pass the position in order to extract the exact card tapped?
Thanks
Make an interface to handle clicks with
RecyclerViews
to do it first create a class named
FirebaseViewHolder
and then just in your
onCreateViewHolder
Note that the first class just declares the views you're going to be clicking, so, instead of the variables I have mentioned, you should do it with your own.