Android Parse.com ParseQueryAdapter恢复分页状态

时间:2015-04-18 17:45:30

标签: android listview parse-platform pagination android-parsequeryadapter

启用分页后,我再次与ParseQueryAdapter挣扎。

我有一个带有ParseQueryAdapter的ListView,向我显示正确的列表。但由于我不知道这个列表会计算多少元素,我通过

启用适配器中的分页
setPaginationEnabled(true);

当我点击列表中的某个项目时,它会与另一个片段进行交易,比如说B.当我点击回来时,ListView片段会返回(片段A)。

片段 A 包含带有项目的列表 OnItemClick - >片段 B

因为我有分页但我不希望用户注意到它,所以当我到达页面末尾时,我会自动加载下一页:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    getListView().setAdapter(adapter);
    getListView().setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            final int lastItem = firstVisibleItem + visibleItemCount;
            if (lastItem == totalItemCount) {
                if (preLast != lastItem) { //this avoid multiple calls for the last item
                    preLast = lastItem;
                    adapter.loadNextPage();
                }
            }
        }
    });
}

问题是,当用户点击列表中的某个项目时,如果B出现则按回来,它会返回到A,但片段会丢失其状态,我有再次滚动返回我点击的项目。

我现在正试图通过计算我加载的页面来恢复A状态,然后手动加载它:

@Override
public void onResume() {

    // mLoadedPages is initialized with 0 and 
    // is incremented each time I load a page

    if (mLoadedPages != 0) {
        for (int i = 0; i < mLoadedPages; i++) {
            adapter.loadNextPage();
        }

        getListView().setSelection(mLastKnownFirstItem);
    }
    super.onResume();
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt("mLoadedPages", mLoadedPages);
    savedInstanceState.putInt("mLastKnownFirstItem", getListView().getFirstVisiblePosition());
}

@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    if (savedInstanceState != null) {
        mLoadedPages = savedInstanceState.getInt("mLoadedPages");
        mLastKnownFirstItem = savedInstanceState.getInt("mLastKnownFirstItem");
    }
}

这看起来非常粗鲁,野蛮而且不优雅(而且它还使用此代码使用 IndexOutOfBoundsException )。 有人知道如何摆脱这个问题吗?

提前谢谢。

0 个答案:

没有答案