Voilà ce que j'essaie de faire.
ArrayList
d'objet à l'intérieur d'un fragmentFragmentActivity
(l'activité qui héberge tous les fragments)Donc, ce que j'ai fait est le suivant.
J'ai d'abord créé le SharedViewModel
d'où je vais définir et obtenir les données de:
class SharedViewModel: ViewModel() {
var personArrayObj:MutableLiveData<ArrayList<Person>> = MutableLiveData()
fun setPersonArray(personArray:ArrayList<Person>){
personArrayObj.value = personArray
}
val getPersonArray:LiveData<ArrayList<Person>>
get() = personArrayObj
}
Maintenant, j'instancie ce ViewModel
à l'intérieur du MainActivity
qui héberge toutes les créations de fragments, ainsi, je peux obtenir le ArrayData
de partout où Fragmenter son ensemble:
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)
})
}
}
Ensuite, la dernière chose que je dois faire est de définir la valeur de ce tableau à partir du fragment que je veux, puis l'activité de l'hôte sera déclenchée si la valeur a changé, donc, pour ce faire, je fais simplement une fonction viewModel.setValue(personArray)
à mon désir Fragment .
Lorsque j'essaie d'instancier le SharedViewModel
à l'intérieur d'un fragment, j'obtiens ce problème:
J'ai essayé d'affirmer !! pour le null, utilisez let aussi, mais ne fonctionne pas et je me demande d'où il vient que FragmentActivity
requis
Si j'utilise viewLifecycleOwner
au lieu de activity
, il me dit qu'il ne peut pas être appelé avec Fragment ou FragmentActivity ?
Des indices?
Merci .
Mettez la chose dans onActivityCreated () au lieu de onCreateView () ... Cela résoudra le problème de getActivity () nullable ... Parce que selon le cycle de vie d'un fragment, onActivityCreated () est après onCreareView () ... Et le l'activité est créée à l'appel de onActivityCreated () ... Ainsi, getActivity () renverra l'activité qui vient d'être créée