ich eine grundlegende Implementierung der Architektur Komponenten der Live-Daten mit Kotlin ausprobieren wie folgt aus:Android Livedata Observer nicht aktiv nach dem ersten Update
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 })
....
Meine Viewmodel-Klasse wird wie folgt erstellt:
class MarketViewModel : ViewModel()
{
var book: MutableLiveData<Book>? =MutableLiveData()
var repository: Repository?= Repository()
init {
update("parameter")
}
fun update(s: String)
{
book=repository?.getBook(s)
}
}
And My Repository:
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
}
}
Und das alles funktioniert großartig und UI wird aktualisiert, wie es sollte, aber nur zum ersten Mal. Wenn ich versuche, manuell, Anrufe zu tätigen, das Ansichtsmodell von einer UI-Aktion zu aktualisieren, der Retrofit-Aufruf funktioniert immer noch wie erwartet, aber die neuen Daten nicht auf den Beobachter im Fragmente gesendet:
//this doesn't work:
viewModel.update("string")
//This returns false:
viewModel.book.hasActiveObservers()
Ist es das erwartete Verhalten für ein Observer nach dem ersten Trigger inaktiv werden?
i ein gleichen Typen Problem habe zurückgeben können Sie bitte meinen Code aussehen in ... erstes Mal seine ausgelöst .... aber danach onChanged wird nicht aufgerufen, bis ich die Konfiguration ändern .. –
hier ist der Link @Vincent Minmoun-Prat https://StackOverflow.com/Questions/48341561/will-the-onchanged-method-trigger -just-as-we-ändern-the-data-even-wenn-wir-nicht/48342600? noredirect = 1 # comment83670748_48342600 –