У меня есть несколько очень специфических вопросов, которые помогут мне понять MVVM. Спасибо, что нашли время и посмотрели на то, о чем я подумала.
В настоящее время я разрабатываю свое первое приложение с использованием компонентов архитектуры, и основной процесс выглядит следующим образом: у меня есть хранилище, извлекающее данные из YouTube-data-API (списки воспроизведения от пользователя и содержащие видео), когда приложение запускается в StartActivity
и «хранит» данные в списке в Repository
: (базовая иллюстрация ниже, а не фактический код, так как это может быть слишком много дляобъясните)
object Repository(){
...
var playlists = mutableListOf<Playlist>()
...
}
И класс данных Playlist выглядит примерно так:
data class Playlist(id: String, description: String, uploadedOn: String, favourite: Boolean = false)
После того, как данные были успешно загружены, у меня есть MainViewModel
и MainActivity
для отображения всех результатов в RecyclerView
, где ViewModel
получает данные из репозитория при инициализации:
class MainViewModel: ViewModel(){
init{
updatePlaylists()
}
fun updatePlaylists(){
playlistLiveData.value = Repository.playlists
}
}
MainActivity
, конечно, имеет Observer
и отображает данные из MainViewModel
в RecyclerView
. Когда я нажимаю на элемент в этом RecyclerView
, я вижу VideoDetailsActivity
, который отображает данные для определенного видео и дает возможность установить флаг избранного. Флаг избранного является атрибутом, который автоматически обновляет данные Repository-Playlist-List по своим собственным VideoDetailsViewModel
(неважно, просто обратите внимание, что данные репозитория здесь изменены). Теперь я возвращаюсь из этого действия обратно к * 1025. *, где отображаются все элементы, я вызываю метод из MainViewModel
в onActivityResult()
, который "обновляет" данные из Repository
:
override fun onActivityResult(...){
...
mainViewModel.updateFavorites()
...
}
Теперь мои вопросы:
1) Можно ли сделать Repository
a Singleton
и это хороший способ "сохранить" список в нем? (Данные загружаются из API при каждом запуске)
2) Когда я обновляю список с Repository
в Activity
, а затем возвращаюсь, например, к MainActivity
, что является лучшим способом сказать MainViewModel
что данные изменились? Мой подход в порядке? Что лучше использовать LiveData
в Repository
?
3) Могу ли я использовать ViewModels
для "пустого" (без обзора) Activity
(например, только ProgressBar
), дляцель удаления как можно большего количества логического кода из самого Activity
? Или это не достигло своей цели?
(при необходимости могу предоставить больше информации по любому вопросу)