android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()’ on a null object 问题解决
2016-03-16 14:21
651 查看
RecyclerView初使用遇到的一个问题
最近一直在忙别的项目,RecyclerView出来后,大致看了一下,并没有在实际项目中使用,今天有空写个小程序,正好用了下,遇到了如下的问题。因为一直觉得RecyclerView用起来很简单,我就引入了包后,直接写了个控件:
</pre><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="color:#e8bf6a;"><android.support.v7.widget.RecyclerView </span><span style="color:#e8bf6a;"> </span><span style="color:#9876aa;">android</span><span style="color:#bababa;">:id=</span><span style="color:#a5c261;">"@+id/main_fragment_recycler_view" </span><span style="color:#a5c261;"> </span><span style="color:#bababa;">xmlns:</span><span style="color:#9876aa;">android</span><span style="color:#bababa;">=</span><span style="color:#a5c261;">"http://schemas.android.com/apk/res/android" </span><span style="color:#a5c261;"> </span><span style="color:#9876aa;">android</span><span style="color:#bababa;">:layout_width=</span><span style="color:#a5c261;">"match_parent" </span><span style="color:#a5c261;"> </span><span style="color:#9876aa;">android</span><span style="color:#bababa;">:layout_height=</span><span style="color:#a5c261;">"match_parent" </span><span style="color:#a5c261;"> </span><span style="color:#9876aa;">android</span><span style="color:#bababa;">:clipToPadding=</span><span style="color:#a5c261;">"false" </span><span style="color:#a5c261;"> </span><span style="color:#9876aa;">android</span><span style="color:#bababa;">:scrollbars=</span><span style="color:#a5c261;">"none"</span><span style="color:#e8bf6a;">> </span><span style="color:#e8bf6a;"> </span><span style="color:#e8bf6a;"></android.support.v7.widget.RecyclerView></span>
然后,在activity中啥都没干,先编译一下吧。
结果编译通过,运行时遇到这个错误:
java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()’ on a null object reference
看一下字面意思:空指针,试图在一个空的对象引用上调用一个虚拟方法canScrollVertically()
回去看了一下文档,原来RecyclerView将 layout 抽象成了一个 LayoutManager,RecyclerView 不负责子 View 的布局,我们可以自定义 LayoutManager 来实现不同的布局效果,目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默认是垂直, 可以指定水平, 这样就轻松实现了水平的 ListView。
最后结论,使用RecyclerView必须定义一个Manager()布局管理器,否则会造成点击crash。我们
需要自己定义一个LayoutManager:
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;">LinearLayoutManager layoutManager = <span style="color:#cc7832;">new </span>LinearLayoutManager(<span style="color:#9876aa;">context</span>)<span style="color:#cc7832;">; </span>layoutManager.setOrientation(LinearLayoutManager.<span style="color:#9876aa;"><em>VERTICAL</em></span>)<span style="color:#cc7832;">; </span><span style="color:#9876aa;">mRecyclerView</span>.setLayoutManager(layoutManager)<span style="color:#cc7832;">;</span>
相关文章推荐
- 并发编程(6)Object类对线程的操作(wait/notify/notifyAll)
- 【游戏客户端开发】 IOS开发——Swift和Objective-C交互时的一些注意点
- [Object-C] 多语言支持 繁体中文(台湾)不起作用
- object 定位 全屏 在浏览器中的问题
- Objective_C中block的使用
- 由String的内存分配了解Object和基础数据类型内存分配
- Object传入String类型和其他
- iOS NSObject
- python函数 callable(object)
- Decodes a String into an object of the specified type
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- object-c内存布局
- Objective—C语言的新魅力
- Object-C基础-01-概述
- Objective-C中,ARC下的 strong和weak指针原理解释
- Object-C非正式协议与正式协议的区别
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
- 2016-02-01_2&nbsp;&nbsp;Object类
- 论a different object with the same identifier value
- UML 对象图 object diagram