android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()’ on a null object 問題解決

 

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>

發佈了60 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章