Это то, что я пытаюсь сделать.
- Установите
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
}
Теперь я создаю экземпляр 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)
})
}
}
Тогда последнее, что мне нужно сделать, это установить значение этого массива из любого фрагмента, который я хочу, и тогда действие узла будет запущено, если значение изменилось, поэтому для этого я просто делаю viewModel.setValue(personArray)
по моему желанию фрагмент .
Проблема
Когда я пытаюсь создать экземпляр SharedViewModel
внутри любого фрагмента, я получаю эту проблему:
Я пытался утверждать !! для нуля, используйте пусть тоже, но не работает, и мне интересно, откуда FragmentActivity
требуется
Если я использую viewLifecycleOwner
вместо activity
, он говорит мне, что он не может быть вызван с Fragment или FragmentActivity ?
Есть какие-нибудь подсказки?
Спасибо.