Scrollview内部的Recyclerview未调用自定义适配器函数(onBindViewHolder)

时间:2016-10-27 15:43:08

标签: android android-recyclerview android-scrollview custom-adapter

滚动页面时,onBindViewHolder()没有调用。

由于Scrollview,mAdapter.notifyDataSetChanged()未正确更新数据。我在Recycler中只检查了3个Checkbox。加载第二组数据并调用通知程序后,更多的复选框被无关紧密地检查,数据仍然正确地来自Model类。

由于安全原因,我无法在此处分享代码。 我已经花了一天时间来解决问题。尚未修复。

然后我尝试删除了scrollview,它有效。

我还有另外几个视图适合滚动条。所以我添加了作为布局并添加到Recycler的第一个位置。有效。但是,只要我想要那个时候就应该来自片段。有没有办法以这种方式解决。

2 个答案:

答案 0 :(得分:0)

我认为您应该将ScrollView替换为android.support.v4.widget.NestedScrollView

例如:

<?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true" >

    <android.support.design.widget.AppBarLayout
                android:id="@+id/app_bar"
                android:layout_width="match_parent"
                android:layout_height="@dimen/app_bar_height"
                android:fitsSystemWindows="true"
                android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="?attr/actionBarSize"
                        app:layout_collapseMode="pin"
                        app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" >

    <!-- Place RecyclerView in here-->

    </android.support.v4.widget.NestedScrollView>

    </android.support.design.widget.CoordinatorLayout>

答案 1 :(得分:0)

@Ogande,谢谢。我试过你的代码。同样的事情正在发生。所以我尝试了不同的解决方案,就像我在问题中提到的那样。

我删除了scrollview并仅保留了Recyclerview。

我在适配器中添加了两个布局。因此,每当我想添加新布局时,我将片段中的布尔值传递给适配器为true,并且在开始时所有位置都将默认值设置为false。因此,notifychanged()将反映对具有该新布局的适配器的更改。

它按照我的预期很好地工作。