Как реализовать пользовательский список пользователей в Viewmodel (Java - Android) - PullRequest
1 голос
/ 31 мая 2019

Я начинающий программист и пытаюсь разработать приложение для Android с использованием MVVM и новейших компонентов Jetpack (в данном случае это относится к Room: Navigation и LiveData)

У меня есть база данных пользователей, созданная с помощью Room, и в одном из моих фрагментов я должен отобразить список этих пользователей, но не всех, только тех, которые имеют определенный идентификатор. В зависимости от того, где я запускаю этот фрагмент в приложении, этот список изменяется (отображаются разные пользователи)

Каждый раз, когда я возвращаюсь к этому фрагменту, он воссоздается (насколько я понимаю, именно так работает Navigation), но у меня возникает проблема с выяснением того, как избежать этого «пользовательского» списка пользователей от перезагрузки данных из базы данных каждый раз, когда я создайте представление, поскольку в противном случае RecyclerView, который содержит этот список, мигает в течение доли секунды, пока приложение обращается к БД.

Это то, что я пытался сделать в моей Viewmodel (это явно неправильно, но, возможно, это поможет вам понять, что я пытаюсь сделать)

public class UserViewModel extends AndroidViewModel {
private LiveData<List<User>> customUserList;
private UserRepository mUserRepository;

public LiveData<List<User>> getUsersForGroup(int groupId) {
        if(customUserList != null){
            return customUserList;
        } else {
            customUserList = mUserRepository.getUsersForGroup(groupId);
            return customUserList;
        }
    }

Я могу подумать о некоторых "хакерских" способах сделать это, но должен быть правильный способ сделать это.

Должен ли я использовать в этом случае ViewModelFactory? И если это так, как я могу это реализовать? Я не мог найти много информации об этом, и то, что я нашел, написано на Kotlin.

Какой правильный подход?

Спасибо.

...