1

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が発生しました)。誰かがこの問題を取り除く方法を知っていますか?

前もって感謝します。

4

0 に答える 0