Android:更改 cardView 在 recyclerView 中的可见性

Android: changing cardView visibility in recyclerView

我有一个 recyclerView,其中包含由同一布局中的 2 个 Cardview 呈现的项目。
当我点击一个 Cardview 时,我希望另一个 cardview 折叠或展开。
它有效,但是当我点击卡片 1 时,卡片 9,18... 也会展开。
我已经阅读了有关 stableId 和 getItemID 的内容,但在实施时仍然无法正常工作。
我现在正在使用 hashCode 来获取 itemId,因为我知道它是在我的数据集对象中实现的,并且我确信它 returns 是一个唯一的 ID。
这是代码:
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();
    }

所以感谢对我的问题的评论,这里是这个问题的解决方案。
我在我的 modelObject 中添加了一个 isVisible 属性,并用它来设置 cardView 的可见性值。
这是代码:

   @Override
public void onBindViewHolder(@NonNull ArrDepListItemModelVH holder, int position) {
    AirportFlightContract airportFlightContract = dataSet.get(position);
    //Set visibility of the card by checking it's model attribute
    holder.getSubCardView().setVisibility(airportFlightContract.isVisible()?View.VISIBLE:View.GONE);
    holder.getTopCardView().setOnClickListener(v->{
        //Check model to see if the card is visible
        if (!airportFlightContract.isVisible()) {
            //Change visibility and update model
            holder.getSubCardView().setVisibility(View.VISIBLE);
            airportFlightContract.setVisible(true);
        } else {
            holder.getSubCardView().setVisibility(View.GONE);
            airportFlightContract.setVisible(false);
        }
    });