восстановление состояния в ведущем с MVP - PullRequest
0 голосов
/ 01 июля 2018

https://medium.com/@cervonefrancesco/model-view-presenter-android-guidelines-94970b430ddf говорит о необходимости восстановления состояния в модели вместо презентатора. Что если у меня есть очень простая «модель», скажем, двоичный переключатель, который обновляет текстовое представление, чтобы включить или выключить? Создание модельного класса Toggle с одним строковым значением выглядит как перебор.

Другой вариант - передать пакет из моей Activity в соответствующий метод в моем презентаторе внутри onSaveInstanceState и восстановить его аналогичным образом с помощью onCreate. Но в статье также говорится, что мы должны избегать зависимости Android от докладчика .

Наконец я попытался использовать Icepick, но это не сработало:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Icepick.restoreInstanceState(this, savedInstanceState);
    (Button) findViewById(R.id.btn).setOnClickListener(this);
    presenter.onCreate();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Icepick.saveInstanceState(this, outState);
}

@Override
public void onClick(View view) {
    presenter.onButtonClicked();
}

@Override
public void updateState(String state) {
    tv.setText(state);
}

MainPresenter.java

    public class MainPresenter {

    private MainView mainView;
    @State String toggle;

    @Inject
    public MainPresenter(MainView mainView) {
        this.mainView = mainView;
    }

    void onCreate() {
        mainView.updateState(toggle);
    }

    void onButtonClicked() {
        mainView.updateState(toggle.equals("on") ? "off" : "on");
    }
}

Какие у меня варианты? Если мне придется использовать модельный подход, могу ли я увидеть пример этого для моего случая?

1 Ответ

0 голосов
/ 01 июля 2018

Если вы используете обработку аннотаций для поддержания состояния, она не будет автоматически заполнять данные в докладчике без Icepick.saveInstanceState(this, outState), который нельзя вызвать в докладчике.

@State String toggle;

Эта строка должна присутствовать в упражнении. У вас в презентаторе есть метод запроса данных путем переключения. Примерно так:

@State String toggle = "off"; //default value

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
(Button) findViewById(R.id.btn).setOnClickListener(this);
presenter.onCreate();
presenter.setState(toggle)
}

Вы можете сохранить это значение как глобальную переменную в презентаторе и соответственно решить поток приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...