2017-09-29 12 views
0

私はMVVM parternを実装しようとしています。 私は、その中に3つの断片を持つViewPagerを含むアクティビティを持っています。各フラグメントは同じエンティティで動作します。MVVMパターン使用時にViewModelにアクセス

Activtyの中で私はViewModelのインスタンスを作成しました。

protected void onCreate(Bundle savedInstanceState) { 
    TaskViewModel.Factory factory = new 
    TaskViewModel.Factory(this.getApplication(), mTaskId); 
    mTaskViewModel = ViewModelProviders.of(this, factory).get(TaskViewModel.class); 
} 

ここでフラグメントと共有する適切な方法は何ですか?

getter/setterはまだガイドラインを尊重していますか?あなたのフラグメント(ViewPager)間で同じビューモデルを共有したい場合は

おかげ

答えて

0

あなたがあなたの活動の代わりに、「この」(フラグメント)を使用して、あなたのViewModelを初期化します。

"of"の最初のパラメータは、使用するLivecycleOwnerを定義します。アクティビティを選択するので、ViewModelはフラグメント間で永続的になり、アクティビティが破棄されるまで存続します。 工場自体がちょうど(データ付き)ビューモデルを初期化するために使用される

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
    var viewModel = ViewModelProviders.of(
       activity, //define who's the holder of the ViewModel 
       viewModelFactory) 
    .get(YourVm::class.java) 
    /** ..... **/ 
} 

(Kotlin)。

アンドロイド例:

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
     @Nullable Bundle savedInstanceState) { 
      YourVm viewModel = ViewModelProviders.of(
       getActivity(), //define who's the holder of the ViewModel 
       viewModelFactory) 
    .get(YourVm::class); 
    /** ... **/ 
} 

あなたのViewModelがあなたの活動に使用/初期化し、永続的なビューモデルを取得するためにViewModelProviders.of()を使用できることを意味します。

関連する問題