Это то, как я работаю с моим приложением, где я также использую шаблон ViewModel + Repository:
- Сначала убедитесь, что у вашего объекта Repository есть область приложения, чтобы он также выдерживал уничтожение фрагментов. и деятельность.
- Поскольку ваша ViewModel выживет при поворотах экрана, сохраняйте кеш выбранных данных в памяти в вашей ViewModel. Например: если вы заставите ваш пользовательский интерфейс наблюдать LiveData в вашей ViewModel, и вы установите значение в LiveData, когда репозиторий вернется, LiveData сохранит последнее переданное значение, поэтому, когда ваш пользовательский интерфейс снова подпишется, вы сразу получите данные .
- И, так как ваш фрагмент будет воссоздан, вы будете вызывать снова fetch, но в вашей ViewModel вы можете сохранить и проверить, сделали ли вы сетевой вызов с теми же параметрами и URL, и проигнорировать его. , (Примечание: не устанавливайте фильтр, если saveInstanceState не является нулевым, чтобы избежать повторной выборки, это не всегда так).
Это идея, которую вы можете адаптировать по-своему.
Моя главная мысль заключается в том, что ваша ViewModel поможет вам пережить любой тип изменений конфигурации без повторной загрузки данных или потери состояния вашего экрана. Всегда старайтесь, чтобы ваша ViewModel оставалась без изменений, а ваш пользовательский интерфейс - без учета состояния, поэтому единственной обязанностью вашего пользовательского интерфейса является отражение любого состояния, в котором находится ваша ViewModel.