带匕首的 Moxy 在旋转后不保存视图状态

Moxy with dagger doesn't save view state after rotation

我在我的应用程序中使用 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,因为没有理由.我想使用片段并将演示者注入片段,而不是 activity.

所以,我在这里显示来自 EditText 的处理文本,旋转后它消失了。我做错了什么?为什么 Moxy 不恢复我的视图状态? 我是否以正确的方式注入演示者? 请解释一下,如果你看到:)

你可以在这里分析Moxy是如何工作的,并且有一个例子link

我认为您在每次 activity onCreate 调用时都在 activity 中替换了这个片段。添加到您的 activity 类似 if (savedInstanceState == null) { replaceFragment }

的内容