ViewPager с просмотрами списков и fragmentstatepageradapter

У меня есть viewpager с 5 вкладками. В каждом фрагменте на странице просмотра у меня есть список, заполненный данными, которые я получаю с сервера (вызовы сервера выполняются с помощью AsyncTask).

Я также использую Fragmentstatepageradapter, чтобы иметь максимально плавную навигацию, но кажется, что что-то не работает должным образом, когда я перехожу от фрагмента, имеющего список, к другому фрагменту со списком.

Мне интересно, почему, поскольку данные уже сохранены, и я хочу, чтобы просмотрщик выталкивал эти фрагменты из стека.

Вот мой адаптер:

public class TabsPagerAdapter extends FragmentStatePagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {
        switch (index){
            case 0:
               return new Fragment1();
            case 1:
                return new Fragment2();
            case 2:
                return new Fragment3();
            case 3:
                return new Fragment4();
            case 4:
                return new Fragment5();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 5;
    }
}

После небольшого исследования я увидел, что getItem() всегда должен возвращать новый экземпляр фрагмента, но я все еще не могу плавно сохранять/восстанавливать состояния. Я пытался использовать myViewPager.setOffscreenPageLimit(4);, который дает лучшую производительность, но навигация по вкладкам все еще немного запаздывает.

Нужно ли переопределять instanceItem/destroyItem, чтобы сохранить состояния фрагментов?


person Juvi    schedule 28.05.2015    source источник


Ответы (1)


Проблема решена путем изменения параметра layout_height в ListView с wrap_content на match_parent.

Если для высоты установлено значение wrap_content, метод getView внутри адаптера будет вызываться несколько раз, и это является причиной медленной навигации между вкладками.

Я надеюсь, что это кому-то поможет, ответ можно найти здесь.

person Juvi    schedule 29.05.2015