我在我的应用中使用了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不会恢复我的情况? 我是否以正确的方式注入主持人? 请解释一下,如果你看到:)。
答案 0 :(得分:1)
您可以分析Moxy如何在这里工作,并且有一个示例link
答案 1 :(得分:1)
我认为您在每个活动onCreate
电话的活动中替换此片段。添加到您的活动if (savedInstanceState == null) { replaceFragment }