Мосби: Как использовать ViewState в Activity при повороте экрана?
app / build.gradle:
implementation 'com.hannesdorfmann.mosby3:mvp:3.1.0'
implementation 'com.hannesdorfmann.mosby3:viewstate:3.1.0'
У меня есть активность, которая показывает PDF-файл. Также сверху и снизу показаны 2 контейнера с иконками. При нажатии на pdf оба контейнера скрываются. При повторном нажатии оба контейнера снова отображаются. И так далее. Когда контейнеры не видны, и я поворачиваю телефон, чем контейнеры показывают. Но они ДОЛЖНЫ быть скрытыми. Таким образом, чтобы решить эту проблему, я должен использовать ViewState. Метод, который показывает / скрывает контейнер в действии: showTopAndBottomContainer()/hideTopAndBottomContainer()
Вот код:
public interface OfferDetailsView extends MvpView {
public void showTopAndBottomContainer();
public void hideTopAndBottomContainer();
}
public interface OfferDetailsPdfMvp {
interface View extends OfferDetailsView {
public void openLocalPdfFile(File file, int pageNumber);
}
interface Presenter<V extends MvpView> extends OfferDetailsPresenter<V> {
public void onPageScrolled(int page, int pageCount);
}
}
Вот моя обычная деятельность:
public class OfferDetailsPdfActivity extends MvpViewStateActivity<OfferDetailsPdfMvp.View, OfferDetailsPdfPresenterImplMvp, OfferDetailsPdfViewState>
implements OnPageChangeListener, OfferDetailsPdfMvp.View {
@NonNull
@Override
public OfferDetailsPdfPresenterImplMvp createPresenter() {
presenter = new OfferDetailsPdfPresenterImplMvp(this, offerId);
return presenter;
}
@OnClick(R.id.pdfView)
public void onClickPdfView() {
presenter.onClickScreen(offerDetailsToolBarMainContainer.getVisibility() == View.VISIBLE);
}
@Override
public void showTopAndBottomContainer() {
offerDetailsToolBarMainContainer.setVisibility(View.VISIBLE);
offerBottomContainer.setVisibility(View.VISIBLE);
}
@Override
public void hideTopAndBottomContainer() {
offerDetailsToolBarMainContainer.setVisibility(View.GONE);
offerBottomContainer.setVisibility(View.GONE);
}
@NonNull
@Override
public OfferDetailsPdfViewState createViewState() {
return new OfferDetailsPdfViewState();
}
@Override
public void onNewViewStateInstance() {
presenter.viewIsReady();
}
}
Вот мой докладчик: (Я показываю только метод, который вызывается при нажатии на PDF)
public class OfferDetailsPdfPresenterImplMvp extends MvpBasePresenter<OfferDetailsPdfMvp.View> implements OfferDetailsPdfMvp.Presenter<OfferDetailsPdfMvp.View> {
@Override
public void onClickScreen(boolean isVisibleTopContainer) {
if (isVisibleTopContainer) {
ifViewAttached(OfferDetailsView::hideTopAndBottomContainer);
} else {
ifViewAttached(OfferDetailsView::showTopAndBottomContainer);
}
}
}
Вот мой пользовательский ViewState:
public class OfferDetailsPdfViewState implements RestorableViewState<OfferDetailsPdfMvp.View> {
private boolean isshowTopAndBottomContainer;
private final static String iS_SHOW_TOP_AND_BOTTOM_CONTAINER = OfferDetailsPdfViewState.class.getName() + "_iS_SHOW_TOP_AND_BOTTOM_CONTAINER";
public void setIsshowTopAndBottomContainer(boolean isshowTopAndBottomContainer) {
this.isshowTopAndBottomContainer = isshowTopAndBottomContainer;
}
@Override
public void saveInstanceState(@NonNull Bundle out) {
out.putBoolean(iS_SHOW_TOP_AND_BOTTOM_CONTAINER, isshowTopAndBottomContainer);
}
@Override
public RestorableViewState<OfferDetailsPdfMvp.View> restoreInstanceState(Bundle in) {
return this;
}
@Override
public void apply(OfferDetailsPdfMvp.View view, boolean retained) {
if (isshowTopAndBottomContainer) {
view.showTopAndBottomContainer();
} else {
view.hideTopAndBottomContainer();
}
}
}
ХОРОШО. метод apply()
это успех вызова. Вопрос: как мне нужно восстановить состояние в Activity при повороте телефона? Что мне нужно отредактировать в своей деятельности?