Android 向RecyclerView动态添加组件

Android 向RecyclerView动态添加组件,android,android-custom-view,android-recyclerview,Android,Android Custom View,Android Recyclerview,我正在展示每日活动。每天的事件数是可变的。RecView中的每个项目都是一天,它应该包含与事件数量相同的视图 以下是一个项目的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match

我正在展示每日活动。每天的事件数是可变的。RecView中的每个项目都是一天,它应该包含与事件数量相同的视图

以下是一个项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llDay">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvDay"
        android:text="TODAY"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:textSize="25sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvNothing"
        android:text="No events"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:textStyle="italic"
        android:visibility="gone"/>

</LinearLayout>

好的,终于明白了。 首先将布局更改为:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llDay">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvDay"
        android:text="TODAY"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:textSize="25sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvNothing"
        android:text="No events"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:textStyle="italic"
        android:visibility="gone"/>
 <LinearLayout 
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/llDay1"/>
</LinearLayout>
在addLayouts方法更改中:

 viewHolder.llDay.addView(teachingDiaryLayout);

同样在for循环之前添加

     viewHolder.llDay1.removeAllViews();
for (Displayable event : events)
好的,我终于明白了。 首先将布局更改为:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llDay">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvDay"
        android:text="TODAY"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:textSize="25sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvNothing"
        android:text="No events"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:textStyle="italic"
        android:visibility="gone"/>
 <LinearLayout 
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/llDay1"/>
</LinearLayout>
在addLayouts方法更改中:

 viewHolder.llDay.addView(teachingDiaryLayout);

同样在for循环之前添加

     viewHolder.llDay1.removeAllViews();
for (Displayable event : events)

问题是因为正在重用回收器视图项。因此,如果第一项有10个事件,第100项有1个事件。当视图被回收时,第100项仍可能显示10个事件。所以试试这个:在for循环之前调用viewHolder.llDay.removeAllViews()。我已经尝试过了,但是没有帮助。只显示了一天。另一个解决方案可以检查llDays是否包含我们要添加的视图,但我不知道如何比较它们。能否发布viewHolder代码。我已经添加了viewHolder。问题是因为正在重复使用recycler视图项。因此,如果第一项有10个事件,第100项有1个事件。当视图被回收时,第100项仍可能显示10个事件。所以试试这个:在for循环之前调用viewHolder.llDay.removeAllViews()。我已经尝试过了,但是没有帮助。只显示了一天。另一个解决方案是检查llDays是否包含我们要添加的视图,但我不知道如何比较它们。你能发布viewHolder代码吗?我已经添加了ViewHolderI我真的非常感谢你的帮助。非常感谢你!我真的非常感谢你的帮助。非常感谢你!
     viewHolder.llDay1.removeAllViews();
for (Displayable event : events)