gpt4 book ai didi

android - 如何使用 kotlin 在 android 中初始化小部件

转载 作者:太空狗 更新时间:2023-10-29 15:29:51 25 4
gpt4 key购买 nike

我已经开始学习在 android 中使用 kotlin 语言并在初始化我的按钮变量时遇到问题,因为在定义我的变量时它要求在我用空值初始化并在 oncreate 函数中绑定(bind)变量时提供一些初始值它给了

kotlin.KotlinNullPointerException

这是我的代码

class AddsFragment : Fragment() {

var Add: Button = null!!

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val Rootview = inflater!!.inflate(R.layout.clubsfragment, null, false)
Add = Rootview.findViewById(R.id.add) as Button
return Rootview
}
}

最佳答案

!! 运算符检查接收器是否为 null,如果为空则抛出 KotlinNullPointerException。所以 null!! 将始终抛出异常。

您可以通过以下方式实现您想要的:

  1. 将属性的类型设置为Button?。在这种情况下,当访问按钮的方法时,您将不得不使用 ?!!

    var add: Button? = null
    // Initialize it somewhere.

    add?.setText("Text") // Calls setText if Add != null
    add!!.setText("Text") // Throws an exception if Add == null
  2. 将按钮设为 lateinit 属性。

    lateinit var add: Button
  3. 使按钮成为 notNull 委托(delegate)属性。

    var add: Button by Delegates.notNull()

在最后两种情况下,您无法检查按钮是否为 null。如果您需要对变量进行 null 比较,请使用第一种方法。


还有另一种方法,我不会在此答案中详细描述。第一个是使用 Kotlin Android Extensions .这是一个编译器插件,可为您的 View 生成合成属性,因此您无需调用 findViewById() 即可使用生成的属性访问 View 。

第二种方法是创建您自己的委托(delegate),它将为您调用 findViewById()。它可能看起来像这样:

val add: Button by bindView(R.id.add)

您可以在 KotterKnife 中找到此类委托(delegate)的示例项目。

关于android - 如何使用 kotlin 在 android 中初始化小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37513787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com