使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误

Posted

技术标签:

【中文标题】使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误【英文标题】:Null Pointer Error in referencing RecyclerView in a fragment using Kotlin 【发布时间】:2018-02-09 22:23:39 【问题描述】:

当我遇到问题时,我正在尝试 kotlin 及其在 android 中的新功能。 kotlin 中有一个很酷的东西,您可以直接使用 xml 中的 id 而无需使用findViewById()。但是当我将它应用到回收器视图并尝试使其工作时,我得到一个空指针异常。我检查了 xml,并且确实有一个带有我使用的 ID 的回收站视图。你们能帮我弄清楚为什么我在这里得到一个空指针异常吗?

这是我引用回收站视图并在其上应用方法的代码。

with(rv_my_device)
    setHasFixedSize(true)
    layoutManager = LinearLayoutManager(activity)
    listAdapter = MyDeviceAdapter(activity,titles,values)
    adapter = listAdapter
    

我得到的错误是

FATAL EXCEPTION: main                                                                          
Process: com.example.sriram.mydevice, PID: 24771                                                                            
java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.sriram.mydevice/com.example.sriram.mydevice.MainActivity: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference                                                                               
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)                                                                  
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724     
at android.app.ActivityThread.-wrap12(ActivityThread.java
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)                                                                                 
at android.os.Handler.dispatchMessage(Handler.java:102)                                                                                 
at android.os.Looper.loop(Looper.java:154)                                                                                 
at android.app.ActivityThread.main(ActivityThread.java:6123)                                                                                  
at java.lang.reflect.Method.invoke(Native Method)                                                                                 

kotlin 代码存在于片段的 onCreateView 方法中。

伙计们,请不要反对说这是一个关于空指针的重复问题。我知道什么是空指针。我只是无法弄清楚我的代码哪里出错了,或者我是否误解了 kotlin 中的某些内容..

【问题讨论】:

【参考方案1】:

如果您在 onCreateView 中调用您的视图,请将其移至 onViewCreated, 因为在 onCreateView 中调用视图时没有初始化视图

【讨论】:

那行得通。但是你能解释一下为什么它适用于 java 而不适用于 kotlin 吗?我的意思是我在 onCreateView 方法中有整个回收器视图代码,它在 java 中运行良好,但在 kotlin 中无法运行。 因为在使用 kotlin 扩展时会调用 getView().findViewById(R.id. rv_my_device) ,而在 onCreateView 中,getView() 会返回 null【参考方案2】:

rv_my_devicenull。除此之外,我们无法帮助您,因为您没有包含初始化变量的代码,也没有包含执行代码的位置。所以不可能复制你的问题。

【讨论】:

就是这样。我没有从 R 类中找到 id 并将其初始化为变量的变量。 rv_my_device 是 xml 文件中的 ID,我可以直接在我的 java 类中使用它。对于代码的位置,我现在更新它

以上是关于使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误

如何使用 kotlin 实现分页

kotlin Recycler查看分页

如何在 kotlin 的 Recycler View Adapter 中添加更多数据列表而不清除先前的数据?

Fragments RecyclerView Databinding Kotlin - 未解析的引用变量名称

在使用 Recycler View 时尝试在空对象引用上调用虚拟方法