Android 向RecyclerView动态添加组件
我正在展示每日活动。每天的事件数是可变的。RecView中的每个项目都是一天,它应该包含与事件数量相同的视图 以下是一个项目的布局: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
<?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)