I have a recyclerView containing items presented by 2 Cardviews in the same Layout.
When I click on a Cardview, I want the other cardview to collapse or expand.
It works but when for example I click on card 1, card 9,18,... also expands.
I have read about stableId's and getItemID's but it still doesn't work properly when implemented.
I am now using hashCode to get the itemId as I know that it is implemented in my dataset object and I am sure that it returns a unique ID.
Here is the code :
RecyclerViewAdapter
public class ArrDepRecyclerViewAdapter extends RecyclerView.Adapter<ArrDepRecyclerViewAdapter.ArrDepListItemModelVH> {
private final boolean arrival;
private final List<AirportFlightContract> dataSet;
public ArrDepRecyclerViewAdapter(List<AirportFlightContract> dataSet, boolean arrival) {
this.dataSet = dataSet;
this.arrival = arrival;
setHasStableIds(true);
}
@NonNull
@Override
public ArrDepListItemModelVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_arr_dep_list_item7, parent, false);
return new ArrDepListItemModelVH(view);
}
@Override
public void onBindViewHolder(@NonNull ArrDepListItemModelVH holder, int position) {
//topCardView is the card on which I Click
//subCardView is the card which needs to expand/collapse
holder.getTopCardView().setOnClickListener(v->{
if (holder.getSubCardView().getVisibility() == View.GONE) {
holder.getSubCardView().setVisibility(View.VISIBLE);
} else {
holder.getSubCardView().setVisibility(View.GONE);
}
});
...
@Override
public int getItemCount() {
if (dataSet != null) {
return dataSet.size();
} else {
return 0;
}
}
@Override
public long getItemId(int position) {
return (long) dataSet.get(position).hashCode();
}