android - 函数没有被调用 Kotlin

标签 android function kotlin viewmodel

我该如何解决这个问题?下面的函数不会运行。我看不到 toast 消息。我正在尝试实现一个 View 模型。

这是我 fragment 的 onCreateView:

activity?.let {
    val viewmodel = ViewModelProviders.of(this).get(Testviewmodel::class.java)
    observeInput(viewmodel)
}

这是我正在尝试执行的 onCreateView 之外的那个:

private fun observeInput(viewmodel: Testviewmodel) {
    viewmodel.Testlist?.observe(viewLifecycleOwner, Observer {
        it?.let {
            Toast.makeText(context, "inside works", Toast.LENGTH_LONG).show()
        }
    })
}

这是 View 模型:

class Testviewmodel: ViewModel() {
    val Testlist: MutableLiveData<ArrayList<String>>? = null
}

最佳答案

viewmodel.Testlist?.observe(viewLifecycleOwner, Observer {
        it?.let {
            Toast.makeText(context, "inside works", Toast.LENGTH_LONG).show()
        }
    })

这将不起作用,因为您的 TeSTList 为 null(您在此处将其定义为 null):

val Testlist: MutableLiveData<ArrayList<String>>? = null

请记住,kotlin 具有可空性(?),这意味着您的函数内部:

it?.let { Toast.makeText(context, "inside works", Toast.LENGTH_LONG).show()
        }

从不运行,因为 viewmodel.TeSTList? 被评估为 null 然后什么都不做。

你可以做的一个改变是像这样实现它:

val Testlist: MutableLiveData<ArrayList<String>> = MutableLiveData() 

现在,您的可变数据将不会为空

在您的 View 模型中,您可以执行一个init block :

 init {
        Testlist.value = arrayListOf()
    }

这会将一个空数组分配给 View 模型中可变实时数据的值

关于android - 函数没有被调用 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57585314/

相关文章:

android - 哪个 API 版本适用于 Android 2.3.6?

android - 如何使用 gradle 为 3rd 方部门管理不同的支持库版本?

javascript - 无法将 "apply"陷阱设置为代理对象

python - 定义一个包含不等式的函数

c - 将变量传递给 C 中的函数

java - 如何使用android中的函数进行异步计数器

android - 删除 Jetpack Compose 新更新中复选框周围的默认填充

android - exoplayer 播放器错误无法连接到 hls 链接

kotlin - 我可以在类外使用扩展 *member* 吗?

java - 如何向 Android 导航添加自定义按钮和文本? (以 X 身份登录)