У меня есть проект с RecyclerView MVVM, и я новичок в Android компонентах архитектуры! Теперь я хочу сохранить состояние RecyclerView с помощью ViewModel, но во фрагменте мой код не работает (в Activity работал)
И теперь я показываю только MyFragment и MyViewModel, а остальные прикрепляю ссылку на Tutorial
Учебное пособие https://medium.com/@atifmukhtar / recycler-view-with-mvvm-liveata-a1fd062d2280
My Fargment
public class HomeFragment extends Fragment implements LifecycleOwner {
private RecyclerView recyclerView;
private HomeAdapter homeAdapter;
private HomeViewModel viewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_home, container, false);
this.setHasOptionsMenu(true);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
//I use code from
//https://developer.android.com/topic/libraries/architecture/viewmodel
viewModel.getUserMutableLiveData().observe(getViewLifecycleOwner(), userListUpdateObserver);
viewModel = new ViewModelProvider(requireActivity()).get(HomeViewModel.class);
return view;
}
private Observer<ArrayList<ProductData>> userListUpdateObserver = new Observer<ArrayList<ProductData>>() {
@Override
public void onChanged(ArrayList<ProductData> userArrayList) {
homeAdapter = new HomeAdapter(requireActivity(),userArrayList);
recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
recyclerView.setAdapter(homeAdapter);
}
};
}
My ViewModel
public class HomeViewModel extends ViewModel {
private MutableLiveData<ArrayList<ProductData>> userLiveData;
private ArrayList<ProductData> userArrayList;
public HomeViewModel() {
userLiveData = new MutableLiveData<>();
init();
}
MutableLiveData<ArrayList<ProductData>> getUserMutableLiveData() {
return userLiveData;
}
private void init(){
populateList();
userLiveData.setValue(userArrayList);
}
private void populateList(){
ProductData user = new ProductData();
user.setName("Daylight");
user.setPrice("Best rating movie");
userArrayList = new ArrayList<>();
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
userArrayList.add(user);
}
}