Пытаюсь создать приложение с архитектурой MVP (Moxy). Дело в том, что фрагмент не сохраняет своё состояние после поворота устройства. Вот метод onCreate активити, в которой запускается фрагмент:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comments);
String link = getIntent().getStringExtra(EXTRA_LINK_COMMENTS);
FragmentManager fragmentManager = getSupportFragmentManager();
CommentFragment fragment = CommentFragment.newInstance(link);
fragmentManager.beginTransaction().add(R.id.comments_fragment_host, fragment).commitNowAllowingStateLoss();
}
Код презентера для фрагмента:
@InjectViewState
public class CommentsPresenter extends MvpPresenter<CommentsView> {
private CommentsModel mCommentsModel;
public CommentsPresenter(){
mCommentsModel = new CommentsModel();
}
@Override
protected void onFirstViewAttach() {
super.onFirstViewAttach();
showLoading(true);
loadComments();
}
public void loadComments(){
mCommentsModel.loadComments(new CommentsModel.LoadCommentsCallback() {
@Override
public void onLoad(List<Comment> comments) {
getViewState().showComments(comments);
}
});
}
public void showLoading(boolean state){
getViewState().setUpdating(state);
}
public void setLink(String link){
mCommentsModel.setLink(link);
}
}
Вот код самого фрагмента:
public class CommentFragment extends MvpAppCompatFragment implements CommentsView{
/*биндим view*/
private CommentsAdapter mCommentsAdapter;
private LinearLayoutManager mLinearLayout;
private static final String ARG_COMMENTS_LINK = "comments_link";
private String mLink;
public static CommentFragment newInstance(String link){
Bundle bundle = new Bundle();
bundle.putSerializable(ARG_COMMENTS_LINK, link);
CommentFragment commentFragment = new CommentFragment();
commentFragment.setArguments(bundle);
return commentFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getArguments() != null){
mLink = (String)getArguments().getSerializable(ARG_COMMENTS_LINK);
setHasOptionsMenu(true);
setRetainInstance(true);
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.comments_fragment_layout, container, false);
ButterKnife.bind(this, v);
AppCompatActivity actionBar = (AppCompatActivity) getActivity();
actionBar.setSupportActionBar(mToolbar);
actionBar.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
actionBar.getSupportActionBar().setDisplayShowHomeEnabled(true);
actionBar.getSupportActionBar().setTitle(R.string.comments_title);
mCommentsAdapter = new CommentsAdapter();
mLinearLayout = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(mLinearLayout);
mRecyclerView.setAdapter(mCommentsAdapter);
mCommentsPresenter.setLink(mLink);
return v;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().finish();
return false;
}
return super.onOptionsItemSelected(item);
}
@Override
public void setUpdating(boolean state) {
mSwipeRefreshLayout.setRefreshing(state);
}
@Override
public void showComments(List<Comment> comments) {
mCommentsAdapter.setComments(comments);
mCommentsAdapter.notifyDataSetChanged();
setUpdating(false);
}
}
У меня есть другой фрагмент, который разработан по аналогичной схеме, но в который не передаётся никакое значение, он работает прекрасно и сохраняет своё состояние.
Где может скрываться ошибка? P.S. В методе onCreate попробовал запускать фрагмент, который работает нормально - он тоже не сохраняется. Мне кажется проблема где-то на уровне onCreate активности.