栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我在RecyclerView上获得空引用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我在RecyclerView上获得空引用

基本上,在回收者完成之前要先处理LayoutManager。

从Android来源:

@Overrideprotected void onDetachedFromWindow() {    super.onDetachedFromWindow();    if (mItemAnimator != null) {        mItemAnimator.endAnimations();    }    mFirstLayoutComplete = false;    stopScroll();    mIsAttached = false;    if (mLayout != null) {        mLayout.onDetachedFromWindow(this, mRecycler);    }    removeCallbacks(mItemAnimatorRunner);}

问题出在stopScroll尝试调用mLayout.stopSmoothScroller();时。而不检查mLayout是否为null。

我为正在开发的应用程序添加了一个非常骇人的补丁,但我不建议将其用于长期解决方案,因为这是一个很大的难题。如果像我一样,您的截止日期很紧,那么最好只是捕获空指针异常并忽略它。

我的修补程序只是创建一个扩展RecyclerView的自定义视图:

import android.content.Context;import android.support.v7.widget.RecyclerView;import android.util.AttributeSet;public class HotFixRecyclerView extends RecyclerView{    public HotFixRecyclerView( Context context )    {        super( context );    }    public HotFixRecyclerView( Context context, AttributeSet attrs )    {        super( context, attrs );    }    public HotFixRecyclerView( Context context, AttributeSet attrs, int defStyle )    {        super( context, attrs, defStyle );    }    @Override    public void stopScroll()    {        try        { super.stopScroll();        }        catch( NullPointerException exception )        {         }    }}

然后将所有引用从RecyclerView更改为HotFixRecyclerView。如果您确实使用过,请在Android修复此问题后将其删除,因为这有点hack。

  • 如果您使用recylerview inn XML,请不要忘记相应地更改XML文件以使用
    com.your.package.HotFixRecyclerView
    而不是
    android.support.v7.widget.RecyclerView


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号