Android 正在使用MVP还原演示者中的状态

Android 正在使用MVP还原演示者中的状态,android,mvp,Android,Mvp,表示恢复模型中的状态,而不是演示者。如果我有一个非常简单的“模型”,比如说一个二进制开关,可以将textview更新为打开或关闭,该怎么办?创建一个具有单个字符串值的模型切换类似乎有些过分 另一个选项是将bundle从我的活动传递到onSaveInstanceState中我的presenter中的相应方法中,并使用onCreate进行类似的恢复。但文章还说,我们应该避免在演示者中使用android依赖项 最后,我尝试使用Icepick,但不起作用: MainActivity.java @Over

表示恢复模型中的状态,而不是演示者。如果我有一个非常简单的“模型”,比如说一个二进制开关,可以将textview更新为打开或关闭,该怎么办?创建一个具有单个字符串值的模型切换类似乎有些过分

另一个选项是将bundle从我的活动传递到onSaveInstanceState中我的presenter中的相应方法中,并使用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");
    }
}

我有什么选择?如果我必须使用模型方法,我可以为我的案例看一个这样的例子吗?

如果您使用注释处理来维护状态,它将不会自动将数据填充到您的演示者中,而没有Icepick.saveInstanceState(this,outState),您不能在演示者中调用它

@状态字符串切换

此行应出现在活动中。在演示者中有一个通过切换请求数据的方法。大概是这样的:

@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)
}
您可以将此值作为全局变量存储在presenter中,并相应地决定应用程序流