首页
学习
活动
专区
圈层
工具
发布

接手同事的 Android 项目,一运行就崩!LRecyclerView 报 “Observer 未注册”,5 分钟搞定

一、先看崩溃日志:关键信息藏在“未注册”里当时点击切换Fragment,App直接闪退,Logcat里刷出的错误栈里,最扎眼的就是这句:java.lang.IllegalStateException:...(Observable.java:69)at android.support.v7.widget.RecyclerView$Adapter.unregisterAdapterDataObserver(RecyclerView.java...有没有旧的”既然问题出在“重复设置Adapter,且没判断旧Adapter是否存在”,那解决办法就很直接:设置Adapter前,先检查LRecyclerView当前有没有Adapter,只有为空时才新创建并设置...我把代码改成了这样(正确写法):// 关键:先判断当前Adapter是否为空,为空才设置if (lrecyclerView.getAdapter() == null) { // 只在第一次创建时new...(源码里也给了链接:https://github.com/jdsjlzx/LRecyclerView/issues/115),发现这是个老坑:LRecyclerView内部会对传入的Adapter做一层包装

19610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NestedScrollView 嵌套 ListView 实现滑动折叠效果

    当我们引入RecyclerView的时候,恰好是压死骆驼的最后一根稻草,故不得不采用其他方案来代替RecyclerView 和 CollapsingToolbarLayout实现的折叠效果。...fitsSystemWindows,经本人代码测试,表示CollapsingToolbarLayout的上边界是否扩展到statusbar,这里如果想使用透明的statusbar,这里更新下应该该布局的根布局的该属性为true...&& velocityY < 0) { final RecyclerView recyclerView = (RecyclerView) target;...ThemeOverlay.AppCompat.Dark.ActionBar" app:layout_behavior="com.youdao.vocabulary.widget.FlingBehavior"> 题外话2 java.lang.IllegalStateException...题外话3 23.2.0中在CoordinatorLayout中使用Toolbar ,toolbar无法与顶部对齐,即顶部存在垂直间距。

    4.2K50

    RecyclerView的复用机制

    但看网上的博客会发现,大多只是照着源码看一遍,并不会仔细地分析和推敲,RecyclerView为什么要设计这一层缓存,每一层缓存在什么情景下使用,以及每一层缓存的设置,对RecyclerView运行真正的影响...,就是RecyclerView为我们开发者在mCachedViews和RecycledViewPool中加了一层缓存。...它本身的大小是无限的,因为屏幕上显示多少item是无法限制的,这一层缓存并不会带来额外的缓存。当我们改变它时,改变的是在屏幕内的item,收到刷新通知时的行为。通常来说,这样的需求是比较少的。...在RecyclerView从页面中消失时,我们可以清空它的ViewHolder到RecycledViewPool中,为我们其他RecyclerView提供更多的缓存。...只有这样,我们才能感受到RecyclerView的巧妙设计,也为我们后续自己工作中的设计提供思路。 技术嘛,需要知其然,知其所以然。

    1.6K20

    【Android 事件分发】ItemTouchHelper 简介 ( 拖动滑动事件 | ItemTouchHelper.Callback 回调 )

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android..., 只能上下滚动 , 左右拉动 , 没有效果 , 也无法进行拖动交换条目操作 ; 调用 ItemTouchHandler 的 attachToRecyclerView 方法 , 传入想要添加上下左右拖动事件的...创建并设置布局管理器 //创建布局管理器 layoutManager = new LinearLayoutManager( this,...创建并设置列表适配器 adapter = new Adapter(); recycler_view.setAdapter(adapter); //4....创建并设置布局管理器 //创建布局管理器 layoutManager = new LinearLayoutManager( this,

    2.3K10

    RecyclerView预加载!

    recyclerView, int newState){} public void onScrolled(@NonNull RecyclerView recyclerView, int...dx, int dy){} } } 在onScrolled()可以拿到LayoutManager,它提供了很多和表项位置有关的方法: // 为 RecyclerView 新增扩展方法,用于监听预加载事件...在正常滑动过程中,这个方案无法做到精准匹配预加载阈值,即无法实现只回调一次onPreload(),因为onScroll()是像素粒度的回调,而预加载要做的表项粒度的检测。...invoke() } } } 然后在业务层中控制该标记位,列表内容请求成功、失败或者超时时将该标记位置为false。...但我更倾向于让业务层维护这个标记位,因为若Adapter只单纯地提供预加载时机,它就不需要关心业务层加载何时结束。

    3.2K00

    Android Jetpack架构组件(九)之Paging

    为了方便开发者进行分页处理,Google为开发者提供了分页组件(Paging),借助Paging组件开发者可以轻松的加载和呈现大型数据集,同时在 RecyclerView 中进行快速、无限滚动。...但如果您使用的是自定义本地存储解决方案或网络专用数据架构,确定数据集包含多少项可能会开销极大,甚至根本无法确定。...2.5 创建PagedListAdapter PagedListAdapter是一个特殊的RecyclerView的RecyclerAdapter,使用方法也和RecyclerAdapter的使用方式类似...UI层 UI层其实就是Activity/Fragment等视图层,主要的作用是给RecycleView设置Adapter,给Adater设置数据。...下面以WanAndroid的接口为例,接口地址为:https://www.wanandroid.com/article/list/1/json,数据源的代码如下。

    4.3K20

    精选Android中高级面试题:性能优化,JNI,设计模式

    的取值应该总是为 2 的指数,即 1、2、4、8 等等,如果外界输入不足为 2 的指数,系统也会默认选择最接近 2 的指数代替,比如 2) 综合考虑。...android:windowBackground 属性为启动页背景图即可 使用 layer-list 制作一张图片 launcher_layer.xml,将其设置为启动页专一主题的背景,并将其设置为启动页布局的背景...只有确定了对象无法恢复引用的时候才会清除对象内存。...创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...android 中无法做到彻底分离,但在代码逻辑层面一定要分清业务逻辑被放置在 model 层,能够更好的复用和修改增加业务。

    3.3K30

    精选Android中高级面试题 (四):性能优化,JNI,设计模式

    的取值应该总是为 2 的指数,即 1、2、4、8 等等,如果外界输入不足为 2 的指数,系统也会默认选择最接近 2 的指数代替,比如 2) 综合考虑。...android:windowBackground 属性为启动页背景图即可 使用 layer-list 制作一张图片 launcher_layer.xml,将其设置为启动页专一主题的背景,并将其设置为启动页布局的背景...只有确定了对象无法恢复引用的时候才会清除对象内存。...创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...android 中无法做到彻底分离,但在代码逻辑层面一定要分清业务逻辑被放置在 model 层,能够更好的复用和修改增加业务。

    3.3K31

    【RecyclerView】二、RecyclerView 简介 ( RecyclerView 特点 | RecyclerView 涉及到的类 )

    , 可以实现不同的 间隔样式 ; 通过设置不同的 ItemAnimator , 可以实现不同的添加 删除动画 ; 以 " 设置不同的 LayoutManager , 就可以实现不同的布局展示样式 " 为例...LayoutManager ; RecyclerView.ViewHolder 用于 定义 RecyclerView 中每个独立元素的显示的组件 , 创建时不关联数据 , 创建后会在 RecyclerView.Adapter...适配器 的 onBindViewHolder 方法中为其关联数据 ; RecyclerView.Adapter 主要作用是 创建 RecyclerView.ViewHolder , 并为其绑定数据...时 , 必须用到的类 , 没有的话 , RecyclerView 便无法显示 ; 此外还有一些可选的设置类 : ItemDecoration , ItemAnimator ; ItemDecoration...RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview 高级 RecyclerView

    6.7K00

    手把手教你用RecyclerView实现猫眼电影选择效果

    (2)第一张图片的左边距和最后一张的右边距需要大于其他图片的边距使其保持在中间 由于第0个item和最后一个item的图片边距比较特殊,而其他的都是默认边距,如果不做设置,第一张和最后一张图片就无法位于正中间...view参数为下图 图片宽度+图片margin为110dp,假设手机屏幕宽度为360dp,我们此时图片的左边距便设置为(360-110)/2 = 125 dp。...recyclerview滑动到idx位置的item可见便停止了,而无法移动到中间。...(4)背景实现高斯模糊 高斯模糊有很多方法,推荐使用Native层的实现,使用RenderScript,此处参考教程教你一分钟实现动态模糊效果,自定义一个ImageUtil类进行处理: class ImageUtils...return original } } 用法只需要new一个ImageUtils对象,传入context,然后在方法里传入模糊程度(1到25)和原始bitmap即可,然后将这个bitmap设置为RecyclerView

    1.5K00
    领券