热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

定义全局android.widgetvar/val时,"lateinit"或"bylazy"

如何解决《定义全局android.widgetvar/val时,"lateinit"或"bylazy"》经验,为你挑选了1个好方法。

在定义全局android.widget变量时,例如TextView,是否优先使用lateinitby lazy?我最初认为使用by lazy将是首选,因为它不可变但我不完全确定.

by lazy 例:

class MainActivity: AppCompatActivity() {

    val helloWorldTextView by lazy { findViewById(R.id.helloWorldTextView) as TextView }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        updateTextView(helloWorldTextView)
    }

    fun updateTextView(tv: TextView?) {
        tv?.setText("Hello?")
    }
}

lateinit 例:

class MainActivity: AppCompatActivity() {

    lateinit var helloWorldTextView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        helloWorldTextView = findViewById(R.id.helloWorldTextView) as TextView
        updateTextView(helloWorldTextView)
    }

    fun updateTextView(tv: TextView?) {
        tv?.setText("Hello?")
    }
}

在定义全局android.widgetvar/val 时,使用一个优于另一个有什么好处吗?使用by lazy定义android.widgetval 有任何陷阱吗?决定是基于您是否需要可变值或不可变值?



1> tynn..:

有一个陷阱by lazy.widget属性是只读的,因此在技术上是最终的(用Java术语).但是没有文档保证onCreate()仅对实例调用一次.也findViewById()可以回来null.

所以使用lateinit是优选的,你会得到一个例外,告诉你val之前是否使用过onCreate().

第三种可能性是Android合成属性.那么你根本不需要担心变量.

import kotlinx.android.synthetic.main.activity_main.*

helloWorldTextView.text = "Hello?"


推荐阅读
author-avatar
辞骸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有