donkingliang / GroupedRecyclerViewAdapter

GroupedRecyclerViewAdapter可以很方便的实现RecyclerView的分组显示,并且每个组都可以包含组头、组尾和子项;可以方便实现多种Type类型的列表,可以实现如QQ联系人的列表一样的列表展开收起功能,还可以实现头部悬浮吸顶功能等。
Apache License 2.0
1.65k stars 216 forks source link

吸顶效果无效 #76

Closed yykou closed 3 years ago

yykou commented 3 years ago

布局:

<ScrollView android:layout_width="match_parent" android:layout_height="match_parent">
<com.startiasoft.long_run_planing.widget.sticky.StickyHeaderLayout android:id="@+id/sticky_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/point_history" android:layout_marginTop="5dp">

                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/recycleView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            </com.startiasoft.long_run_planing.widget.sticky.StickyHeaderLayout>

adapter继承了GroupedRecyclerViewAdapter

问题描述:如果去掉外层的ScrollView,吸顶效果是正常的,加上之后就无效了

donkingliang commented 3 years ago

因为外层嵌套ScrollView,ScrollView里的子view高度会撑开到内容的最大,这时候页面滑动的是ScrollView而不是RecyclerView,所以就不会有吸顶效果了。

yykou commented 3 years ago

那可否再给这个带吸顶效果的RecyclerView 再添加头部呢?我这边RecyclerView顶部还有一小部分布局要展示,滑动的时候要和RecyclerView一起滑动

donkingliang commented 3 years ago

那可否再给这个带吸顶效果的RecyclerView 再添加头部呢?我这边RecyclerView顶部还有一小部分布局要展示,滑动的时候要和RecyclerView一起滑动

GroupedRecyclerViewAdapter是分组的,你可以把上面的布局作为第一个组,这个组只保留组尾来显示上面的布局。

yykou commented 3 years ago

第一个分组怎么实现只保留组尾?子项数据怎么能从第二组开始显示?

donkingliang commented 3 years ago

主要是对这几个方法的复写,这是思路的伪代码,具体你根据自己的业务处理。

    @Override
    public int getGroupCount() {
        return count + 1;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        if (groupPosition == 0){
             // 第一组没有子项
            return 0;
        } else {
            // 原逻辑 注意groupPosition要减1
        }
    }

    @Override
    public boolean hasHeader(int groupPosition) {
        if (groupPosition == 0){
            // 第一组没有头部
            return false;
        } else {
            return true;
        }
    }

    @Override
    public boolean hasFooter(int groupPosition) {
        if (groupPosition == 0){
            // 第一组保留头部
            return true;
        } else {
            return false;
        }
    }
yykou commented 3 years ago

好的 ,感谢作者,问题已解决。