J'essaie une implémentation de base de données Live Component Architecture avec Kotlin comme ceci:Observer Android LiveData pas actif après la première mise à jour
class MarketFragment : LifecycleFragment(){
......
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel=ViewModelProviders.of(this).get(MarketViewModel::class.java)
viewModel.book?.observe(this, Observer { book-> //updateUI })
....
Ma classe ViewModel est créée comme ceci:
class MarketViewModel : ViewModel()
{
var book: MutableLiveData<Book>? =MutableLiveData()
var repository: Repository?= Repository()
init {
update("parameter")
}
fun update(s: String)
{
book=repository?.getBook(s)
}
}
Et mon dépôt:
fun getBook(bookSymbol:String):MutableLiveData<Book>
{
val book=MutableLiveData<Book>()
......
call . enqueue (object : Callback<Book> {
override fun onResponse(call: Call<Book>?, response: Response<Book>?) {
book.value=response?.body()
}
.....
})
return book
}
}
Et tout cela fonctionne très bien et l'interface utilisateur est mise à jour comme il se doit, mais seulement pour la première fois. Si je tente de faire des appels manuels pour mettre à jour le viewmodel d'une action de l'interface utilisateur, l'appel de modernisation fonctionne toujours comme prévu, mais les nouvelles données ne sont pas envoyées à l'observateur dans le Fragment:
//this doesn't work:
viewModel.update("string")
//This returns false:
viewModel.book.hasActiveObservers()
Est-ce le comportement attendu pour un observateur à devenir inactif après le premier déclencheur?
j'ai un même type question pouvez-vous s'il vous plaît regarder dans mon code ... première fois son déclenché .... mais après onChanged n'est pas appelé jusqu'à ce que je change la configuration .. –
voici le lien @Vincent Minmoun-Prat https://stackoverflow.com/questions/48341561/will-the-changed-method-trigger -juste-comme-nous-changeons-les-données-même-si-nous-faisons/48342600? noredirect = 1 # comment83670748_48342600 –