这就是我正在尝试做的事情。
- Set an
ArrayList
Fragment 内的对象
- 从观察者处获取该数组
FragmentActivity
容器(承载所有片段的活动)
所以,我所做的如下。
首先我创建了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
}
现在,我实例化这个ViewModel
在 - 的里面MainActivity
托管所有片段创建,所以,我可以获得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 设置该数组的值,然后如果该值发生变化,主机 Activity 将被触发,所以,要做到这一点,我简单地做了一个viewModel.setValue(personArray)
按我的意愿Fragment .
问题
当我尝试实例化SharedViewModel
在任何片段中我都会遇到这个问题:
我试图断言!对于 null,也使用 let,但不起作用,我想知道它从哪里来FragmentActivity
必需的
如果我使用viewLifecycleOwner
代替activity
它告诉我,它也不能被称为Fragment or 片段活动 ?
有什么线索吗?
Thanks .