Android 复杂的回收问题。省略某些字段

Android 复杂的回收问题。省略某些字段,android,android-recyclerview,Android,Android Recyclerview,尝试构建一个recyclerview,其中一个小部件(保存日期的TextView)根据变量而消失(View.go)。我对recyclerview中的项目所做的如下所示: <?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat android:layout_width="match_parent"

尝试构建一个recyclerview,其中一个小部件(保存日期的TextView)根据变量而消失(View.go)。我对recyclerview中的项目所做的如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/historyItemLayout"
    android:weightSum="100"
    android:layout_marginTop="3dp"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/historyItemDateTV"
        android:background="@color/grey_300"
        android:text="09-24-2020"
        />

<androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="100"
        android:layout_marginTop="3dp">

<androidx.appcompat.widget.LinearLayoutCompat
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="20"
            android:layout_marginStart="15dp">

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/historyItemTeamNameTV"
                android:text="@string/team_name"
                android:textColor="@color/black"
                />
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/historyItemPlayerNameTV"
                android:text="@string/player_name"
                android:textColor="@color/black"
                />
    </androidx.appcompat.widget.LinearLayoutCompat>

  </androidx.appcompat.widget.LinearLayoutCompat>

</androidx.appcompat.widget.LinearLayoutCompat>
    //Now handle hiding of extraneous dates
    if(lastDate == child.date) {
        holder.dateTV.visibility = View.GONE
    }
    else {
        lastDate = child.date
    }

有一个条目列表,每个条目都包含将推送到适配器的所有数据。因此,该列表中的每个条目都包含一个日期字段、一个球员姓名、一个球队名称和一些其他数据(为了简洁起见,此处省略)

我想做的是显示第一次出现的日期,但在日期更改之前隐藏(实际上是View.GONE)

以下是一个例子:

条目1 2020-09-27其他数据

条目2 2020-09-27其他数据

条目3 2020-09-27其他数据

条目4 2020-08-01其他数据

条目5 2020-05-05其他数据

因此,对于这一点,我会显示一行显示2020-09-27,然后在下面有三行显示三个条目的数据,每个条目的日期都是2020-09-27。然后,我将显示另一行,其中仅包含日期2020-08-01,然后在下一行显示该日期的数据,最后显示另一行,其中仅包含日期2020-05-05,另一行包含该最终日期的数据


我已使用比较器将所有数据正确排序,以便插入适配器,但如何在显示时检查日期行是否需要隐藏?

我想我得到了答案…将验证

在RecyclerView中,我将保存上次显示的日期,并在onBindViewHolder中进行检查。如果日期匹配,我将隐藏该文本视图(或者它的布局)

大概是这样的:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/historyItemLayout"
    android:weightSum="100"
    android:layout_marginTop="3dp"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/historyItemDateTV"
        android:background="@color/grey_300"
        android:text="09-24-2020"
        />

<androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="100"
        android:layout_marginTop="3dp">

<androidx.appcompat.widget.LinearLayoutCompat
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="20"
            android:layout_marginStart="15dp">

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/historyItemTeamNameTV"
                android:text="@string/team_name"
                android:textColor="@color/black"
                />
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/historyItemPlayerNameTV"
                android:text="@string/player_name"
                android:textColor="@color/black"
                />
    </androidx.appcompat.widget.LinearLayoutCompat>

  </androidx.appcompat.widget.LinearLayoutCompat>

</androidx.appcompat.widget.LinearLayoutCompat>
    //Now handle hiding of extraneous dates
    if(lastDate == child.date) {
        holder.dateTV.visibility = View.GONE
    }
    else {
        lastDate = child.date
    }

不确定我是否理解正确(截图可能会更好地解释这一点)

但是我认为,你应该使用
View.INVISIBLE
而不是
View.GONE
,这样才不会弄乱整个布局<代码>查看。不可见和
查看。消失
两者都按字面意思执行-当父节点(回收项目)设置了
包装内容
时,这可能会导致混乱(高度不均)