2

当我遇到问题时,我正在尝试使用kotlin及其令人敬畏的新功能。 在kotlin中有这样一件很酷的事情,你可以直接使用xml中的id而不使用findViewById()。但是,当我将它应用于回收视图并尝试使其工作时,我得到一个空指针异常。我检查了xml,我确实有一个带有我使用的ID的回收站视图。你们能帮我弄清楚为什么我在这里得到一个空指针异常吗?使用Kotlin在片段中引用RecyclerView时出现空指针错误

这里是我参考我的回收商视图和应用方法的代码。

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 ComponentInfo{com.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)                     

的科特林代码存在于一个片段的onCreateView方法。

和家伙,请不要downvote说这是一个关于空指针的重复问题。我知道什么是空指针。我只是无法弄清楚我的代码出错了,或者我误解了kotlin中的某些东西。

回答

8

如果你打电话给你的内部意见onCreateView它,当你打电话给他们在onCreateView

+0

这是有效的。但是,你能解释为什么它可以和java一起使用,但不能和kotlin一起使用?我的意思是我在onCreateView方法中拥有整个回收视图代码,并且它在java中正常工作,但不能与kotlin一起工作。 –

+0

,因为当使用kotlin扩展时,它会调用getView()。findViewById(R.id。rv_my_device),并且在onCreateView中,getView()将返回null –

+0

谢谢。这有助于.. –

1

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

+0

那东西移到onViewCreated, 因为观点不被初始化。我没有从R类中找到id并将其初始化为变量的变量。 rv_my_device是xml文件中的ID,我可以直接在我的java类中使用它。而对于代码的位置,即时更新它现在 –