RecyclerView不渲染高度为0dp的单元格

时间:2018-07-28 17:04:02

标签: android android-recyclerview

我制作了一个具有入职流程的应用程序。 我的MainActivity类中有一个recyclerview,我想在onResume命中时(在入职流程之后)更新它。 因此,回收站xml的外观如下:

<android.support.v7.widget.RecyclerView
        android:id="@+id/notifyRecycler"
        android:layout_width="0dp"
        android:layout_height="230dp"
        android:clipToPadding="false"
        android:orientation="horizontal"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

这是单元格布局:

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/cardDetails"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

</...>

我用clear和add交换适配器中的数据,并且当我将单元格布局视图的高度从0dp更改为与父级匹配时,一切工作都很好。 它对于从oncreate第一次运行也很有效,但是当我尝试从onResume更新时,它只是不通知数据集已更改。 这是从onResume函数调用的适配器的代码:

public void setNewData(ArrayList<Model> models) {
    this.notifications.clear();
    this.notifications.addAll(models);
    notifyDataSetChanged();
}

在onCreate中:

adapter = new NotificationsAdapter(new ArrayList<>(), this);
notifyRecycler.setAdapter(adapter);

在onResume中,我制作了boolan var使其仅在恢复应用程序时更新:

ArrayList<NotificationModel> notificationsList = new ArrayList<>();
    notificationsList.add(...);
    notificationsList.add(...);

    adapter.setNewData(notificationsList);

1 个答案:

答案 0 :(得分:0)

Wierd解决方案,通过将父ViewGroup从ConstraintsLayout更改为RelativeLayout来解决。