Moxy with dagger在旋转后不保存视图状态

时间:2018-03-28 09:18:02

标签: android dagger-2 moxy

我在我的应用中使用了Moxy和Dagger 2。看起来匕首运作良好,但是Moxy在旋转后不会恢复视图状态,我不明白为什么。

这是我的观点:

public interface MyView extends MvpView {

    void changeNote(String text);

}

片段:

  public class MyFragment extends MvpFragment implements MyView {

    @BindView(R.id.edittext_login)
    EditText mEditText;

    @BindView(R.id.text_view)
    TextView mTextView;

    @Inject
    @InjectPresenter
    Presenter mPresenter;

    @ProvidePresenter
    Presenter providePresenter() {
        return mPresenter;
    }

    @OnClick(R.id.action_btn)
    public void onClickLoginBtn() {
        mPresenter.doActionsAndShowText(mEditText.getText().toString());
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        doInject();
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        ButterKnife.bind(this, view);
        return view;
    }

    protected void doInject() {
        ((App) getActivity().getApplication()).getComponent().inject(this);
    }

    @Override
    public void changeText(String text) {
        mTextView.setText(text);
    }

}

主讲人:

@InjectViewState
public class Presenter extends MvpPresenter<MyView> {

    private MyRepository mMyRepository;

    @Inject
    public Presenter(@NonNull final MyRepository myRepository) {
        mMyRepository = myRepository;
    }

    void doActionsAndShowText(@NonNull String text) {
        text = mMyRepository.workWithText(text);
        getViewState().changeText(text);
    }

}

我的Activity也扩展了MvpActivity(我试过没有它,但没有帮助),但没有实现MyView,因为没有理由。我想处理片段并将演示者注入片段,而不是活动。

所以,我在这里显示来自EditText的已处理文本,并在旋转后消失。我做错了什么?为什么Moxy不会恢复我的情况? 我是否以正确的方式注入主持人? 请解释一下,如果你看到:)。

2 个答案:

答案 0 :(得分:1)

您可以分析Moxy如何在这里工作,并且有一个示例link

答案 1 :(得分:1)

我认为您在每个活动onCreate电话的活动中替换此片段。添加到您的活动if (savedInstanceState == null) { replaceFragment }