我该如何解决这个问题?下面的函数不会运行。我看不到 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/