I have a problem and I will be grateful if someone helps me. I have a RecyclerView that retrieves data from a server, issuing a request. when the rotation changes, I resubmit this response with onSaveInstanceState so that it does not send the Request again if loadMore is not required for this. But when it changes from portrait to landscape, the first few rows jump forward in one tab, as shown in the figure below β


It fixes the use of scroll afterwards.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_list);
findViews();
extractDataFromBundle();
init();
setListeners();
if (savedInstanceState != null) {
vodOrAod = savedInstanceState.getBoolean("vodOrAod");
if (vodOrAod == true) {
vodFilmAbsListOutputStore = savedInstanceState.getParcelable("ResponseVODFilmList");
films.addAll(vodFilmAbsListOutputStore.results);
showCaseAdapter.notifyDataSetChanged();
} else {
aodTrackAbsListOutputStore = savedInstanceState.getParcelable("ResponseAodTracks");
aodTrackAbses.addAll(aodTrackAbsListOutputStore.results);
showCaseAdapter.notifyDataSetChanged();
}
startIndex = savedInstanceState.getInt("startIndex");
} else {
loadMore();
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (tagDet.type.equals(EnumObjectType.VOD_FILM)) {
savedInstanceState.putParcelable("ResponseVODFilmList", vodFilmAbsListOutputStore);
vodOrAod = true;
savedInstanceState.putBoolean("vodOrAod", vodOrAod);
} else {
savedInstanceState.putParcelable("ResponseAodTracks", aodTrackAbsListOutputStore);
vodOrAod = false;
savedInstanceState.putBoolean("vodOrAod", vodOrAod);
}
savedInstanceState.putInt("startIndex", startIndex);
}
private void loadMore() {
if (tagDet.type.equals(EnumObjectType.VOD_FILM)) {
progressView.setVisibility(View.VISIBLE);
apiRequest.getVODFilmList(
new GetListInput(
tagDet,
startIndex + "",
startIndex + Constants.LIMIT + ""
)
);
} else {
progressView.setVisibility(View.VISIBLE);
apiRequest.getAodTracks(
new GetListInput(
tagDet,
startIndex + "",
startIndex + Constants.LIMIT + ""
)
);
}
startIndex += Constants.LIMIT;
}
private void onFilmListByTagResponse(VODFilmAbsListOutput vodFilmAbsListOutput) {
if (vodFilmAbsListOutputStore == null) {
vodFilmAbsListOutputStore = vodFilmAbsListOutput;
} else {
vodFilmAbsListOutputStore.results.addAll(vodFilmAbsListOutput.results);
}
switch (vodFilmAbsListOutput.status) {
case DONE:
progressView.setVisibility(View.INVISIBLE);
films.addAll(vodFilmAbsListOutput.results);
showCaseAdapter.notifyDataSetChanged();
break;
}
}
What should I do to solve this problem?
source
share