在从纵向旋转到横向后,recyclerview中的可见行向前跳跃一点

时间:2017-04-05 13:06:38

标签: java android rotation android-recyclerview screen-rotation

我有一个问题,如果有人帮助我,我将不胜感激。 我有一个RecyclerView,它通过发出Request来从Server获取数据。当旋转发生变化时,我通过使用onSaveInstanceState重新发送该响应,这样它就不会再次发送请求,除非它需要loadMore。 但是当它从纵向变为横向时,前几行以一个Tab的形式向前跳,如下图所示 - >

enter image description here

enter image description here

之后使用滚动修复。

  @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;
    }
}

我该怎么做才能解决这个问题?

0 个答案:

没有答案