首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓viewBinding使用

安卓viewBinding使用
EN

Stack Overflow用户
提问于 2022-07-13 12:25:24
回答 3查看 88关注 0票数 0

我有一个关于安卓系统viewBinding的问题。通常,我都是这样用的

代码语言:javascript
复制
lateinit var binding: ActivityMainBinding

binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

但我也看到有人这样用它

代码语言:javascript
复制
private val binding: ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) 

setContentView(binding.root)

有什么不同吗?更好的方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2022-07-13 12:46:38

有时,我们遇到这样一种情况,即我们希望避免对类中的某些字段进行初始化,直到实际需要为止。一个典型的例子可能是,沉重的单身汉。这就是使用懒散的时候。

通常,声明为具有非空类型的属性必须在构造函数中初始化.然而,这通常是不方便的。例如,可以通过依赖项注入或单元测试的安装方法初始化属性。在这种情况下,不能在构造函数中提供非空初始化器,但在引用类主体内的属性时仍然希望避免空检查。

要处理这种情况,可以使用lateinit修饰符标记该属性。

上面的场景是使用的场景,因为绑定是在以后的生命周期方法中初始化的。

在懒惰的情况下,它将在代码(即: setContentView )中需要时被调用,该代码再次位于生命周期方法中。

使用任何一个并坚持它。

票数 2
EN

Stack Overflow用户

发布于 2022-07-13 12:51:19

  1. 片断

如果您在一个片段中,我不建议使用其中任何一个,因为您正以这种方式欢迎内存泄漏。在onDestroyView() (if片段)内部,您必须通过以下操作使ViewBinding实例为空

代码语言:javascript
复制
override fun onDestroyView() {
    super.onDestroyView()
    binding = null
}

如果您使用的是lazy或lateinit,它将不允许您这样做,因为lateinit强制您具有不可空的值,而惰性强制您具有不可变的变量。

最好的方法是像文档中所描述的那样使用它

TLDR;

代码语言:javascript
复制
private var _binding: DialogStartcodeBinding? = null
private val binding get() = requireNotNull(_binding)

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    _binding = MyViewBinding.inflate(inflater, container, false)
    return binding.root
}

 override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}
  1. 活动

在这个活动中,我会在onDestroy()中使用片段和空值onDestroy(),或者使用您描述的任何版本。但是在文档中使用的是lateinit方法。

TLDR;使用任何使您更高兴的选项:)两者在Activity中都很好。

票数 1
EN

Stack Overflow用户

发布于 2022-07-13 13:18:52

嗨,迟到和懒惰有区别。

lateinit ->只允许使用var,并且只允许非空值。

Lazy ->对象只有在被调用时才会被创建,否则就不会有对象创建。只有val在懒惰中被允许。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72966253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档