我有一个问题,如果有人帮助我,我将不胜感激。 我有一个RecyclerView,它通过发出Request来从Server获取数据。当旋转发生变化时,我通过使用onSaveInstanceState重新发送该响应,这样它就不会再次发送请求,除非它需要loadMore。 但是当它从纵向变为横向时,前几行以一个Tab的形式向前跳,如下图所示 - >
之后使用滚动修复。
@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;
}
}
我该怎么做才能解决这个问题?