I'm using Moxy and Dagger 2 in my app. It looks like that dagger works well, but Moxy doesn't restore view state after rotation, and i don't understand why.
Here is my View:
public interface MyView extends MvpView {
void changeNote(String text);
}
Fragment:
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);
}
}
Presenter:
@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);
}
}
My Activity
also extends MvpActivity
(I'm tried without it, but it doesn't help), but not implements MyView
, because there are no reason for it. I want to work with fragments and inject presenters into fragments, not in activity.
So, here I'm displaying processed text from EditText, and after rotating it disappears. What i'm doing wrong? Why Moxy doesn't restore the state of view in my case? Was i inject presenter in correct way? Please explain me, if you see :)
I think you replace this fragment in your activity on each activity onCreate
call. Add to your activity something like if (savedInstanceState == null) { replaceFragment }