函数没有被调用 Kotlin

Function not getting called Kotlin

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

这是我片段的 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()
        }
    })
}

这是视图模型:

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 为空(您在此处将其定义为空):

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

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

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

never runs ,因为 viewmodel.Testlist? 被评估为 null 然后什么都不做。

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

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

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

在你的视图模型中,你可以做一个 init 块:

 init {
        Testlist.value = arrayListOf()
    }

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