最初の更新の後:アンドロイドLiveDataオブザーバーアクティブではありませんが、私はこのようにKotlinとアーキテクチャコンポーネントのライブデータの基本的な実装をしようとしている
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 })
....
私のViewModelクラスには、次のように作成されます。
class MarketViewModel : ViewModel()
{
var book: MutableLiveData<Book>? =MutableLiveData()
var repository: Repository?= Repository()
init {
update("parameter")
}
fun update(s: String)
{
book=repository?.getBook(s)
}
}
そして、私のリポジトリ:
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
}
}
これはすごくうまく動作し、UIは最初に更新されるだけです。私は、UIのアクションからのViewModelを更新するために、手動で電話をかけることがしようとした場合、改造コールはまだ期待通りに動作しますが、新しいデータが断片で観察者に送信されません。
//this doesn't work:
viewModel.update("string")
//This returns false:
viewModel.book.hasActiveObservers()
はそれがために期待される動作ですオブザーバーが最初のトリガーの後に非アクティブになる
...最初の時間を返すためにRxJava(フロアブル)を使用することができますそのトリガー....しかしその後、私は構成を変更するまで、onChanged isntが呼び出されます.. –
ここにリンク@ Vincent Minmoun-Prat https://stackoverflow.com/questions/48341561/will-the-onchanged-method-trigger - 私たちが変わったとしてもデータを変えるのと同じように/ 48342600?noredirect = 1#comment83670748_48342600 –