【发布时间】:2019-11-10 15:42:49
【问题描述】:
这就是我想要做的。
- 在 Fragment 内设置对象的
ArrayList - 从
FragmentActivity中的观察者那里获取该数组 容器(承载所有片段的活动)
所以,我所做的是以下。
首先我创建了SharedViewModel,我将从那里设置和获取数据:
SharedViewModel.kt
class SharedViewModel: ViewModel() {
var personArrayObj:MutableLiveData<ArrayList<Person>> = MutableLiveData()
fun setPersonArray(personArray:ArrayList<Person>){
personArrayObj.value = personArray
}
val getPersonArray:LiveData<ArrayList<Person>>
get() = personArrayObj
}
现在,我在托管所有片段创建的MainActivity 中实例化这个ViewModel,所以,我可以从片段集的任何位置获取ArrayData:
MainActivity.kt
class MainActivity: FragmentActivity(){
private lateinit var viewModel:SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
viewModel.getPersonArray.observe(this, Observer { it:ArrayList<Person>
Log.d("Array:",""+it)
})
}
}
然后我需要做的最后一件事是从我想要的任何 Fragment 设置该 Array 的值,然后如果值发生更改,将触发主机 Activity,所以,要做到这一点,我简单地做一个 @ 987654331@ 在我想要的 Fragment 上。
问题
当我尝试在任何片段中实例化 SharedViewModel 时,我遇到了这个问题:
我试图断言!对于 null,也可以使用 let,但它不起作用,我想知道 FragmentActivity 是从哪里来的
如果我使用 viewLifecycleOwner 而不是 activity 它告诉我它不能用 Fragment 或 FragmentActivity 调用?
有什么线索吗?
谢谢。
【问题讨论】:
标签: android kotlin mvvm fragment android-viewmodel