我有兩個Fragment-s,都有RecyclerView和LiveData。當我在第二個片段中做了一些改變,我需要更新第一個片段中的RecyclerView。
所以在更新第二個片段后,我需要在第一個片段中觸發onChange方法。
第一個片段的代碼:
item_viewmodel.getAllCategoryModel(). observe(getViewLifecycleOwner(), new Observer< List<Items>>(){
@Override
public void onChanged(List< Items> myLists) {
/Observer已經被注冊了,但我需要從第二個片段中手動呼叫它。
}
});
我怎樣才能做到這一點呢?
uj5u.com熱心網友回復:
你可以通過使用共享的viewmodel來實作,在兩個片段中都創建一個viewmodel的實體,并相應地使用,更多細節請訪問這個頁面鏈接
uj5u.com熱心網友回復:
你應該嘗試使用Transformations.switchMap()方法,通過上面描述的方法,把第一個livedata依賴于第二個livedata
。這里有一個實體類,它在一個MutableLiveData中持有一個輸入的用戶名稱String(例如來自EditText),并回傳一個LiveData,其中包含一個擁有該名稱的用戶物件的List。它通過在鍵入的名稱每次改變時重新查詢存盤庫模式物件來填充該LiveData。
這個ViewModel將允許觀察UI在用戶ID文本變化時進行 "實時 "更新。
class UserViewModel extends AndroidViewModel {
MutableLiveData<String> nameQueryLiveData = ...
LiveData<List<String> > getUsersWithNameLiveData() {
return Transformations.switchMap(
nameQueryLiveData,
name -> myDataSource.getUsersWithNameLiveData(name))。
}
void setNameQuery(String name) {
this.nameQueryLiveData.setValue(name)。
}
如果你想得到更具體的答案,請發布關于你的viewModel的所有代碼
。uj5u.com熱心網友回復:
我認為最好的方法是在片段中使用by activityViewModels() kotlin屬性委托,并分享宿主活動的Viewmodel以進行跨片段通信。
更多關于使用的資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318388.html
標籤:
