Я использую Room Persistent Data от Android, чтобы хранить данные, поступающие с сервера - локально. Кроме того, я использую шаблон MVVM, рекомендованный официальными документами Android, таким образом, мой recyclerView отображается в обозревателе LiveData примерно так:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_feed, container, false);
((App)getActivity().getApplication()).getmAppComponent().inject(this);
rvFeed = view.findViewById(R.id.rvFeed);
mLinearLayoutManager = new LinearLayoutManager(getActivity());
rvFeed.setLayoutManager(mLinearLayoutManager);
feedAdapter = new FeedAdapter(this);
feedAdapter.setRV(rvFeed);
mFactory = new PostsViewModelFactory(postRepository);
mViewModel = ViewModelProviders.of(this, mFactory).get(PostsViewModel.class);
mViewModel.init();
mViewModel.getPostsLiveData().observe(this, new Observer<List<Post>>() {
@Override
public void onChanged(@Nullable List<Post> posts) {
feedAdapter.setPostsList(posts);
if (firstLaunch) {
rvFeed.setAdapter(feedAdapter);
firstLaunch = false;
}
loading = true;
}
});
return view;
}
mViewModel.getPostsLiveData()
в основном воспроизводит LiveData из комнаты (через репозиторий), таким образом, любые новые данные, добавленные в Room, запускают LiveData Observer, а feedAdapter
заполняет представление recyclerView (то есть setPostsLists()
, которое в ответ вызывает notifyDataSetChanged()
).
Но, как вы можете заметить, новые свежие данные, добавленные в комнату, не будут отображаться как первый элемент в recyclerView, поскольку они не добавляются непосредственно в адаптер [следовательно, я не могу вызвать notifyItemInserted(0)
], а скорее в комнату (местное хранилище).
Итак, мой вопрос, каков наилучший способ добавить в локальное хранилище (Комната), но в дополнение к тому, чтобы заставить элемент отображаться как первый в программе recyclerView, когда он заполняется, когда активируется получение наблюдателя LiveData?
Заранее спасибо:)