android - 有时在片段视图中获取 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"
它的工作!
有什么线索吗?
解决方案
在片段中,始终引用您返回的视图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
}
}
推荐阅读
- reactjs - 这是将 Dispatch 映射到道具的可接受方式吗
- python - 如何在不读取所有文件名的情况下从每个目录加载 20 个最新文件
- javascript - 如何在 Bootstrap SelectPicker 中获取数据 ID?
- r - 使用光栅的多个实际参数错误匹配的形式参数“ylim”
- angular - Rxjs:对象作为可观察对象,内部可观察对象作为值
- fortran - 如何在 Fortran 的代码中直接用“许多数字”设置向量的值?
- c# - 单击带有 IF 的 web 元素时如何处理 ElementClickInterceptedException
- android - 我如何在android中使用导航栏和导航图
- bash - 木偶:“错误:无法从远程服务器检索目录”将代码添加到配置文件后
- javascript - 如何解决jquery自动完成问题