手把手实现tablayout随recycleview滚动而滚动(非官方coordinatorlayout实现)

谷歌新出的Android Design Support Library带来了新的兼容的md风格控件,其中的coordinatorlayout配合appbarlayout再指定behavior可以实现滚动的效果,然而很遗憾,在应用到项目的时候,出现各种问题,比如:

1.我所在的coordinatorlayout布局里需要用到viewstub作为网络请求异常时懒加载的布局,在coordinatorlayout如果延时20多ms再去viewstub.inflate的话布局就找不到了,在relativelayout这些布局就是可以随时调用加载显示。

2.首先向上滚动recycleview,直到tablayout跟随滚动被隐藏,切换到其他fragment再切换回coordinatorlayout所在的fragment,向下滚动recycleview回到位置0的话,tablayout不会滚回来了,需要稍微先上滑动一下再向下话才能回来,估计是tablayout设置的属性app:layout_scrollFlags=”scroll|enterAlways”问题。

3.向上滚动recycleview到一定位置,点击回到顶部的按钮,调用scrollToPosition(0)回到位置0的话,tablayout也是不会滚回来的,也是需要稍微先上滑动一下再向下话才能回来。

所以思考调试了很久还是决定自己动手,丰衣足食,不要coordinatorlayout,再tablayout的包裹布局,通过监听recycleview的onscroll事件,取每次偏移量,调用tablayout的包裹布局的scrollby(0,dy)来实现移动,并针对快速滑动时偏移量的突增进行了判断和处理,最终实现了较好的tablayout随recycleview滚动而滚动效果,这样用户滑动recycleview时能够看到更多的内容,体验又提升了。

首先看下mainactivity的布局:
viewpager和tablayout放在帧布局里面,这样做是为了,recycleview位置0的地方添加一个跟tablayout等高的view,从而tablayout不会遮住recycleview的图片item

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

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/material_primary"
        app:popupTheme="@style/Theme.AppCompat.Light">
    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:layout_below="@id/toolbar"
        android:layout_width="match_parent"
        android:layout_height
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
RecyclerViewAndroid 官方提供的一个高度可定制化的列表控件,它可以实现高效的列表滚动,支持垂直和水平滚动。 要实现 RecyclerView 的垂直滚动,可以按照以下步骤进行: 1. 在布局文件中添加 RecyclerView 控件: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建 RecyclerView 的 Adapter 类,继承自 RecyclerView.Adapter,并实现以下方法: - onCreateViewHolder:创建 ViewHolder 对象 - onBindViewHolder:给 ViewHolder 绑定数据 - getItemCount:获取数据的数量 3. 创建 RecyclerViewViewHolder 类,继承自 RecyclerView.ViewHolder,并在构造方法中初始化布局控件。 4. 在 Activity 或 Fragment 中获取 RecyclerView 的实例,设置布局管理器和 Adapter: ``` // 获取 RecyclerView 实例 RecyclerView recyclerView = findViewById(R.id.recyclerView); // 创建布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); // 设置布局管理器和 Adapter recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); ``` 其中,布局管理器用于控制列表的排列方式,这里使用 LinearLayoutManager 实现垂直滚动。 5. 在 Adapter 中实现数据更新的方法,例如添加、删除、修改等操作,然后调用 Adapter 的 notifyDataSetChanged 方法刷新列表。 至此,就完成了 RecyclerView 的垂直滚动实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值