我有一個視圖模型命名SharedViewModel:共享視圖模型
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;
}
}
我實現它基礎上,谷歌的拱門視圖模型參考頁面上SharedViewModel例如:
一個活動中的兩個或多個片段需要相互通信是很常見的。這從來不是微不足道的,因爲 片段需要定義一些接口描述,並且所有者活動必須將兩者綁定在一起。此外,這兩個片段必須處理其他片段尚未創建或不可見 的情況。
我有兩個片段,分別叫ListFragment
和DetailFragment
。
到現在爲止,我使用了這兩個片段在MasterActivity
。一切運作良好。
我得到了ListFragment
中的ViewModel,選擇了在DetailFragment
上使用它的值。
mStepSelectorViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
然而,現在我需要在某些情況下該ListFragment
(佈局到不同的設備配置)被添加到一個不同的活動,稱爲DetailActivity
。有沒有辦法做到這一點類似上面的例子?
你正在打架。如果它轉到另一個名爲DetailActivity的活動,那麼爲您的Detail Activity創建一個ViewModel。 ViewModels不僅僅是「可以超越配置更改的魔法對象」。他們是你的觀點和你的模型之間的膠水。如果你有不同的活動,你的觀點現在有所不同,因此它需要一個新的視圖模型。如果你像谷歌期望的那樣將問題分開,那麼有權訪問數據的「存儲庫」可以/將被這些視圖模型共享,但它們是不同的實體。 –
如果你正在傳遞一個新的Activity,你不應該爲你的對象使用'Parcelable'嗎? –
實現一個接口來監聽你的活動中選擇了哪個列表項目,包括ListFragment。然後在ListFragment中,獲取onAttach事件中的接口。使用findFragmentByTag將所選項目傳遞給MasterActivity中的DetailFragment,並將其傳遞到其他活動的DetailActivity中。 – sunghun