Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用MVVM体系结构,用房间中的数据填充微调器_Android_Kotlin_Spinner - Fatal编程技术网

Android 如何使用MVVM体系结构,用房间中的数据填充微调器

Android 如何使用MVVM体系结构,用房间中的数据填充微调器,android,kotlin,spinner,Android,Kotlin,Spinner,我想知道用房间数据库中的数据填充任何微调器的最佳实践/方法 我还想使用ViewModel和LiveData(然后我将转到StateFlow!),但我对定义变量的正确顺序感到困惑 首先,我在视图模型中有以下内容: val aniosLiveData = anioRepository.anios.asLiveData() // return LiveData<List<Anio>> 然后,在onViewCreated()中,我有一个包含绑定元素的块: binding.a

我想知道用房间数据库中的数据填充任何微调器的最佳实践/方法

我还想使用ViewModel和LiveData(然后我将转到StateFlow!),但我对定义变量的正确顺序感到困惑

首先,我在视图模型中有以下内容:

val aniosLiveData = anioRepository.anios.asLiveData() // return  LiveData<List<Anio>>
然后,在onViewCreated()中,我有一个包含绑定元素的块:

 binding.apply {
        recyclerViewEnsayos.apply {
            adapter = ensayosAdapter
            layoutManager = LinearLayoutManager( requireContext())
            setHasFixedSize(true)
        }
        spinnerAnio.apply {
            adapter = aniosAdapter  // <- Spinner adapter
        }
    }
binding.apply{
RecycleServiceWnsayos.apply{
适配器=ensayosAdapter
layoutManager=LinearLayoutManager(requireContext())
setHasFixedSize(真)
}
spinnerAnio.apply{
适配器=AnioAdapter//
AnioAdapter=ArrayAdapter(requireContext(),R.layout.spinner\u text\u项,spinnerData)
})
我需要在何处/何时声明“AnioAdapter”?例如:

 //At class level
 private lateinit var aniosAdapter : ArrayAdapter<Anio>
//在类级别
私有lateinit var aniosAdapter:ArrayAdapter
这是正确的方法吗? 还有一个更简单的

提前谢谢!
如果您需要在生命周期挂钩之外引用
AnioAdapter
,我建议您使用您提到的
私有lateinit var
。当您首先正确初始化
spinnerAnio
的适配器时,它不会追溯识别您对
AnioAdapte所做的任何突变r
在执行lifecycle钩子之后。相反,您需要调整
aniosLiveData
观察者,使其显示如下:

ensayosViewModel.aniosLiveData.observe(viewLifecycleOwner, {
    binding.spinnerAnio.adapter = ArrayAdapter<Anio>(
        requireContext(),
        R.layout.spinner_text_item,
        it
    )
})

如果你可以保证你的观察者会被触发,AioSosials将是安全的,声明为<代码>私有LATEIN VAR< <代码>。如果你不确定,将它看作是一个可选的字段将更安全,如下所示。

private var aniosAdapter: ArrayAdapter<Anio>? = null
private var aniosAdapter:ArrayAdapter?=null
ensayosViewModel.aniosLiveData.observe(viewLifecycleOwner, {
    binding.spinnerAnio.adapter = ArrayAdapter<Anio>(
        requireContext(),
        R.layout.spinner_text_item,
        it
    )
})
ensayosViewModel.aniosLiveData.observe(viewLifecycleOwner, {
    aniosAdapter = ArrayAdapter(
        requireContext(),
        R.layout.spinner_text_item,
        it
    )

    binding.spinnerAnio.adapter = aniosAdapter
})
private var aniosAdapter: ArrayAdapter<Anio>? = null