首页 > 解决方案 > 有时在片段视图中获取 IllegalStateException 说视图不能为空,为什么?

问题描述

是的,我已经在 onViewCreated 中编写了我的视图访问权限。所以有时它会显示

IllegalStateException: view must not be null

如果我在清理项目后立即运行,它可以正常工作!!!

使困惑 !

另一个令人困惑的问题是,如果我在 onViewCreated 中使用视图

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {myTextView.text = "MyName"}

它工作正常

但是如果在 Retrofit 调用的 onResponse 中分配它

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    netWorkCallByRetrofit()
} 

netWorkCall(){
   myTextView.text = "MyName"
}

它不工作。如果我在清理项目后立即运行,它可以正常工作!!!如果在 onViewCreated 中初始化它,它再次运行良好

tv: TextView
tv = myTextView
tv.text = "MyName"

它的工作!

有什么线索吗?

标签: androidandroid-fragmentskotlin

解决方案


在片段中,始终引用您返回的视图onCreateView。我倾向于private var thisView: View? = null在片段主体中创建一个,然后onCreateView将其分配给您要返回的视图。例如,片段的其余部分总是引用,thisView.myTextView.text并且您不应该有任何更奇怪的空指针错误。一些代码可能会使这变得不那么混乱:

class MyClass: Fragment(){
    private lateinit var thisView: View // can also make it nullable and set it to null here

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        thisView = inflater.inflate(R.layout.my_cool_layout, container, false)

        thisView.myTextView.setOnClickListener{
            toast("yaaaay")
        }        
        return thisView
    }
}

推荐阅读