Я хочу поделиться той же моделью представления между моим базовым фрагментом и открытым BottomSheetDialogFragment
Так вот, как я наблюдаю за одной и той же моделью представления между этими двумя фрагментами.
BottomSheetDialogFragment
public class TasteFilterBottomDialogFragment extends BottomSheetDialogFragment {
private FilterTasteListViewModel filterTasteListViewModel;
@Inject
ViewModelProvider.Factory viewModelFactory;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
filterTasteListViewModel = ViewModelProviders.of(getActivity(),
viewModelFactory).get(FilterTasteListViewModel.class);
filterTasteListViewModel.init();
observeViewModel(filterTasteListViewModel);
}
private void observeViewModel(FilterTasteListViewModel filterTasteListViewModel) {
filterTasteListViewModel.getFilterTastes().observe(this, new Observer<ArrayList<String>>() {
@Override
public void onChanged(@Nullable ArrayList<String> tasteList) {
// Only this one trigger when viewModel is updated
Log.d("Bottom Dialog", tasteList.toString());
filterTasteList = tasteList;
setFilterButtonState(filterTasteList);
}
});
}
}
Мой базовый фрагмент
public class FoodListFragment extends BaseFragment {
private static TasteFilterBottomDialogFragment tasteFilterBottomDialogFragment;
@Inject
ViewModelProvider.Factory viewModelFactory;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
showFoodListFilterButton();
if (mFoodList != null) {
mFoodListAdapter.setFoodList(mFoodList);
}
final FilterTasteListViewModel filterTasteListViewModel = ViewModelProviders.of(getActivity(),
viewModelFactory).get(FilterTasteListViewModel.class);
filterTasteListViewModel.init();
observeFilterTasteListViewModel(filterTasteListViewModel);
}
private void observeFilterTasteListViewModel(FilterTasteListViewModel filterTasteListViewModel) {
filterTasteListViewModel.getFilterTastes().observe(this, new Observer<ArrayList<String>>() {
@Override
public void onChanged(@Nullable ArrayList<String> filterTasteList) {
// This only trigger on the first time that fragment is initialise
Log.d("FoodList", filterTasteList.toString());
}
});
}
}
Моя ViewModel
public class FilterTasteListViewModel extends AndroidViewModel {
private LiveData<ArrayList<String>> filterTastesObservable;
public LiveData<ArrayList<String>> getFilterTastes() {
return this.filterTastesObservable;
}
public void setFilterTastes(ArrayList<String> filterTastes) {
((MutableLiveData<ArrayList<String>>) this.filterTastesObservable).postValue(filterTastes);
}
}
Поэтому, когда я звонил setFilterTastes
, только эта строка называется
Log.d("Bottom Dialog", tasteList.toString());
Нона самом деле эта строка должна вызываться также (но это не так).
Log.d("FoodList", filterTasteList.toString());
Мой вопрос заключается в том, как сделать так, чтобы наблюдаемое внутри моего baseFragment работало так же, как и внутри моего BottomSheetDialogFragment?
Спасибо!