Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Далее заглянем под капот - MvpPresenter - >
- экземпляр ViewState хранит в себе список команд, которые были переданы из Presenter во View.
- доступ к ViewState можно получить из метода getViewState
- тут хранятся состояния view - >
- public View getViewState() {
- return mViewStateAsView;
- }
- //
- public MvpPresenter() {
- Binder.bind(this);
- mViews = Collections.newSetFromMap(new WeakHashMap<View, Boolean>());
- }
- сохраняет состояние view в WeakHashMap
- Во View происходит событие которое передаётся в Presenter
- привязывания View от Presenter
- public void attachView(View view) {
- if (mViewState != null) {
- //
- тут Presenter передаёт команду во ViewState
- mViewState.attachView(view);
- } else {
- ViewState складывает команду в очередь команд, после чего передаёт её во View
- mViews.add(view);
- }
- if (mFirstLaunch) {
- mFirstLaunch = false;
- //подробное описание и зачем нужен метод в конце письма
- onFirstViewAttach();
- }
- }
- //отвязываем view от presentor
- public void detachView(View view) {
- if (mViewState != null) {
- mViewState.detachView(view);
- } else {
- mViews.remove(view);
- }
- }
- //подробное описание и зачем нужен метод в конце письма
- @SuppressWarnings("WeakerAccess")
- public Set<View> getAttachedViews() {
- if (mViewState != null) {
- return mViewState.getViews();
- }
- return mViews;
- }
- @SuppressWarnings("WeakerAccess")
- public View getViewState() {
- return mViewStateAsView;
- }
- // для чего нужен ->
- Например, если это свежая команда, то нужно применить команду с анимацией.
- метод
- который сообщит вам, в каком состоянии находится конкретная View и тут мы понимаем стоит применять анимацию или нет
- @SuppressWarnings("unused")
- public boolean isInRestoreState(View view) {
- //noinspection SimplifiableIfStatement
- if (mViewState != null) {
- return mViewState.isInRestoreState(view);
- }
- return false;
- }
- @SuppressWarnings({"unchecked", "unused"})
- public void setViewState(MvpViewState<View> viewState) {
- mViewStateAsView = (View) viewState;
- mViewState = (MvpViewState) viewState;
- }
- private static class Binder {
- static void bind(MvpPresenter presenter) {
- MvpView viewState = (MvpView) MoxyReflector.getViewState(presenter.getClass());
- presenter.mViewStateAsView = viewState;
- presenter.mViewState = (MvpViewState) viewState;
- }
- }
- protected void onFirstViewAttach() {
- }
- Этот метод вызывается тогда, когда к конкретному экземпляру Presenter первый раз будет привязана любая View. А когда к этому Presenter будет привязана другая View, к ней уже будет применено состояние из ViewState. И здесь уже не важно, эта новая View – совсем другая View, или пересозданная в результате смены конфигурации. Этот метод подходит для того, чтобы, например, загрузить список новостей при первом открытии экрана списка новостей.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement