問題タブ [android-viewmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
8601 参照

android - Android: ビューモデル。オブザーバー メソッドの呼び出しに失敗しました

新しいアーチを使用しています。グーグルからのコンポーネント。

おかげで管理されているアクティビティログイン/フラグメントの登録にありますFragmentTransaction

Activity->RegisterFragment (with ViewPager) -> RegistrationSteps (adapter)

RegisterFragment 内には ViewPager があります。内部のすべてのページViewPagerが同じ ViewModel を使用するようにします。

これらは、 ViewModelのスコープを設定した親LifecycleOwnerRegistrationStepFragmentを取得する登録手順 ( ) です。ViewModel のスコープをこの親 Fragment に設定したかっただけです。RegistrationFragment

継承元のRegistrationFragment.class

RegistartionSteps (ページ) から継承

3ページに到達するまではすべてうまくいき、(2ページ目に)戻りたいと思います次にmViewPager.setCurrentItem(1)(ページ2:インデックス:1)で例外がスローされます

編集

OK、前のページに移動すると、フラグメントが再作成され、mViewModel.observable()以前のSUCCESSメッセージを受信し、viewpager が前方に移動したため、作成されたばかりのフラグメントが破棄されてエラーが発生したことがわかりました。

解決策は、投稿が呼び出されたときにのみ値を発行するSingleEventLiveDataを作成することです (オブザーバーがアタッチされる前に値が変更された場合、オブザーバーに通知しません)

私はそれをCLOSEとマークします