当前位置:  开发笔记 > 编程语言 > 正文

尝试访问Kotlin片段中的视图时出现NullPointerException

如何解决《尝试访问Kotlin片段中的视图时出现NullPointerException》经验,为你挑选了2个好方法。



1> Egor Neliuba..:

Kotlin合成属性不是神奇的,并且以非常简单的方式工作.当您访问时btn_K,它需要getView().findViewById(R.id.btn_K).

问题是您过早访问它.getView()返回nullonCreateView.尝试在onViewCreated方法中执行此操作:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
}


你也可以像`rootView.btn_K`那样访问它,如果你有一个视图(而不仅仅是片段,这可以在任何地方完成)
有效!!谢谢.快速提醒以备将来参考.我有另一个例外,我挖得更深一些,结果是Null Reference Exception来自异步回调到UI线程,它会尝试访问合成属性,但当时它已经为null.确保使用_Safe Call_运算符(?.)或其他一些空安全运算符.它还有助于保持视图的类引用,而不依赖于`onViewCreated()`之外的合成属性
但有一个问题 - 它为Activity和Fragment生成不同的代码?如果我们使用另一个不包含`getView()`的结构,或者它不能调用`findViewById()`,有没有办法解决它?例如,教它哪个函数将返回我的布局?

2> 小智..:

btn_K这么快就调用它,因为那时它返回一个null并且给你Null Pointer Exception.

您可以通过此合成插件在Fragment生命周期onActivityCreated()之后调用的方法中使用这些视图onCreateView().

onActivityCreated()
{
        super.onActivityCreated(savedInstanceState)
        btn_K.setOnClickListener{}
}

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有