1

AndroidViewModelは、Applicationコンテキストにアクセスするために使用されます。私は明示的にそれを通過することなくActivityさんFragmentManagerにアクセスしようとしている:FragmentManagerをAndroidViewModel内に取得

class FooViewModel(app: Application) : AndroidViewModel(app) { 
    private val fm = (app.applicationContext as Activity).fragmentManager 
    .. 
} 

取得エラー、ActivityContextをキャストすることができません。


質問:明示的にそれを通過することなくAndroidViewModel内部FragmentManagerを取得する方法はありますか?

答えて

4

「いいえ、ありません」Applicationのコンテキストは、FragmentManagerを意識していません。

FragmentManagerは、サブクラスがFragmentActivityの可能性があるオブジェクトです。 ApplicationFragmentActivityのサブクラスではありません。

ViewModelの中にFragmentManagerインスタンスが必要なのはなぜですか?おそらく、ViewModel以外のユニット(例えば、ActivityFragment)以外のユニットに対処するために、ビュー関連のものを委譲する必要があります。このViewModelは設定変更によって保持されるため、ViewModelの中のFragmentManagerへの参照を保持すると、Activityインスタンスが漏れてしまうことに注意してください。

+0

はい、それは考えるのが良い点です。 – Oleg

関連する問題