SharedViewModel という名前の ViewModel があります。
public class SharedViewModel<T> extends ViewModel {
private final MutableLiveData<T> selected = new MutableLiveData<>();
public void select(T item) {
selected.setValue(item);
}
public LiveData<T> getSelected() {
return selected;
}
}
Google の Arch ViewModel リファレンス ページにある SharedViewModel の例に基づいて実装しました。
アクティビティ内の 2 つ以上のフラグメントが互いに通信する必要があることはよくあります。両方のフラグメントがインターフェイスの説明を定義する必要があり、所有者アクティビティが 2 つをバインドする必要があるため、これは決して簡単なことではありません。さらに、両方のフラグメントは、他方のフラグメントがまだ作成されていない、または表示されていない場合を処理する必要があります。
と という 2 つのフラグメントがListFragment
ありDetailFragment
ます。
今まで、これら 2 つのフラグメントを と呼ばれるアクティビティ内で使用MasterActivity
していましたが、すべてうまくいきました。
で ViewModel を取得し、ListFragment
使用する値を選択しましたDetailFragment
。
mStepSelectorViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
ただし、場合によっては、ListFragment
(別のデバイス構成へのレイアウト) を という別のアクティビティに追加する必要がありますDetailActivity
。上記の例と同様にそれを行う方法はありますか?