FragmentStatePagerAdapter возвращает неправильные позиции в getItem

Я использую FragmentStatePagerAdapter. getItem(int position) возвращает неправильные позиции. У меня есть 5 фрагментов. Это позиция, когда я меняю фрагменты:

Fragment0 -> Fragment1: position = 2
Fragment1 -> Fragment2: position = 3
Fragment2 -> Fragment3: position = 4
Fragment3 -> Fragment4: getItem is not called!
Fragment4 -> Fragment3: position = 2
Fragment3 -> Fragment2: position = 1
Fragment2 -> Fragment1: position = 0
Fragment1 -> Fragment0: getItem is not called!

Вот код моего адаптера:

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

public class AppFragmentPageAdapter extends FragmentStatePagerAdapter {
    final int PAGE_COUNT = 5;
    private String tabTitles[] = new String[] { "اخبار", "حقیقت‌سنج", "ویدیوها", "زندگی‌نامه", "برنامه‌ها" };
    private Context context;

    public AppFragmentPageAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
    }

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case (0):
                return NewsFragment.newInstance(position);
            default:
                return VideosFragment.newInstance(position);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }
}

person Navid777    schedule 20.04.2017    source источник
comment
Я не понимаю, что означает Fragment0 -> Fragment1: position = 2. Это вывод в вашем логарифме? Если да, покажите код, который создает этот вывод, и объясните, что вы ожидаете от него.   -  person Code-Apprentice    schedule 20.04.2017
comment
Показанный код создает только два фрагмента. Это нормально, если вы все еще можете проиллюстрировать общую концепцию, о которой спрашиваете.   -  person Code-Apprentice    schedule 21.04.2017


Ответы (1)


Это нормальное поведение. По умолчанию FragmentStatePagerAdapter сохраняет ссылку на текущий отображаемый фрагмент и его соседей. В первом адаптере создайте Fragment0 и Fragment1. Когда вы проводите к Fragment1, он создаст Fragment2 и вызовет для этого getItem(2). После перехода к Fragment2 адаптер уничтожит Fragment0 и создаст Fragment3.

person Orgazm pionerki    schedule 20.04.2017