Задался я вопросом как быть при повороте экрана, если ты используешь паттерн архитектуры MVP. Увидел много советов использовать для этого Moxy. Но у Google ведь есть прекрасный инструмент ViewModel LifeCycle, который живет, пока живет твоя активити. Собственно хочу задать вопрос, нормально ли например прикрепить к активити ViewModel, и передать ссылку на объект ViewModel в презентер? Далее через презентер сохранять в ViewModel данные, которые нужно сохранить при повороте экрана. В презентере проверять на наличие этих данных и соответственно возвращать из ViewModel LifeCycle сохраненые данные при повороте экрана. И не делать например сетевые запросы или обращение к базе данных в модели.
Приведу кусочек примера: ViewModel
public class VModel extends ViewModel
{
private PhotoDay vmPhotoDay = null;
public PhotoDay getVmPhotoDay() {
return vmPhotoDay;
}
public void setVmPhotoDay(PhotoDay vmPhotoDay) {
this.vmPhotoDay = vmPhotoDay;
}
}
введите сюда код
В MainActivity
public class MainActivity extends AppCompatActivity implements MainContract.IMainView {
private MainContract.IMainPresenter iMainPresenter;
private ImageView pDay;
private ProgressBar progressBar;
private VModel vModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pDay = (ImageView)findViewById(R.id.photoDay);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
vModel = ViewModelProviders.of(this).get(VModel.class);
iMainPresenter = new MainPresenter(this, vModel);
iMainPresenter.onShow();
}
@Override
public void showPhotoDay(PhotoDay photoDay) {
Picasso.get()
.load(photoDay.getUrl())
.resize(300, 350)
.into(pDay);
}
}
В презентере MainPresenter
public class MainPresenter implements MainContract.IMainPresenter {
private MainContract.IMainView iMainView;
private IModelDannie iModelDannie;
private VModel vModel;
public MainPresenter(MainContract.IMainView iMainView, VModel vModel)
{
this.iMainView = iMainView;
iModelDannie = new ModelDannie();
this.vModel = vModel;
}
@Override
public void onShow() {
iMainView.showProgressBar();
if(vModel.getVmPhotoDay()==null){
iModelDannie.getPhotoDay().subscribe((PhotoDay photoDay)->
{
if(photoDay!=null) {
iMainView.showPhotoDay(photoDay);
vModel.setVmPhotoDay(photoDay);
}else
{
iMainView.message(R.string.error_image);
}
});
}else
{
iMainView.showPhotoDay(vModel.getVmPhotoDay());
}
}
}
Можно ли так делать?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем доброго времени! Данный код взят из книги Head First JavaПри выполнении данного кода получается вывод в консоль в виде :"6 14"
Не могу разобраться, какой bind нужно прикручивать к элементам Java FX, чтобы получить эффект появления затухания, влияя на него из Task()
Пытаюсь сделать двохуровневое адаптивное менюВроде что-то получилось, но есть проблема, когда первый раз нажимать на пункт меню, то оно открывается...