Android Parse.com ParseQueryAdapter восстановить состояние пагинации

Я снова борюсь с ParseQueryAdapter когда нумерация страниц включена.

У меня есть ListView с ParseQueryAdapter, отображающий мне правильный список. Но так как я не знаю, сколько элементов будет в этом списке, я включаю нумерацию страниц в адаптере с помощью

setPaginationEnabled(true);

Когда я нажимаю на элемент списка, он совершает транзакцию с другим фрагментом, скажем, B. Когда я возвращаюсь назад, возвращается фрагмент ListView (фрагмент 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, но фрагмент потерял свое состояние, я должен снова прокрутить, чтобы вернуться туда, где был элемент, на котором я щелкнул.,

Я сейчас пытаюсь восстановить состояние путем подсчета загруженных страниц, а затем загрузить его вручную примерно так:

@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 ответов

Другие вопросы по тегам