Мосби: Как использовать 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 при повороте телефона? Что мне нужно отредактировать в своей деятельности?

0 ответов

Другие вопросы по тегам