基本上,在回收者完成之前要先处理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



