带匕首的 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 }
的内容
我在我的应用程序中使用 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 }