FragmentPageAdapter не работает должным образом

Я использую FragmentPagerAdapter для навигации между 4 фрагментами в моем приложении. Но я столкнулся со странной проблемой. Когда я отлаживал свое приложение, я обнаружил, что значение индекса в getItem загружается в 0 при запуске MainActivity, поэтому загружается Fargment с 0-м индексом, после чего индекс изменяется на 1, а фрагмент с 1-м индексом загружается, и из-за этого последовательность получения фрагмента немного нарушена. Не знаю, упускаю ли я что-то. Но я действительно не могу понять проблему. Вот мой класс FragmentPagerAdapter:

public class TabsPagerAdapter extends FragmentStatePagerAdapter {
    Context context;

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

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            return new FragmentA();
        case 1:
            return new FragmentB();
        case 2:
            return new FragmentC();
        case 3:
            return new FragmentD();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 4;
    }

}

Этот класс не ведет себя так, как я хочу, чтобы он работал. Пользовательский интерфейс загружается в соответствии с тем, как я хочу. Я имею в виду, предположим, если я нажму на вкладку FragmentB(), будет создан индекс следующего фрагмента, т.е. FragmentC(), но на моем устройстве я увижу FragmentB(). Я знаю, что не могу правильно объяснить проблему. но все же я был бы признателен, если кто-нибудь может помочь, но, пожалуйста, не минусуйте. Заранее спасибо :)


person Puneetr90    schedule 01.02.2014    source источник
comment
проблема в начале? Я не совсем понял проблему, если честно.   -  person Orhan Obut    schedule 01.02.2014
comment
разместите свой код на onTabSelected   -  person Shayan Pourvatan    schedule 01.02.2014
comment
@Override public void onTabSelected (вкладка Tab, FragmentTransaction ft) { viewPager.setCurrentItem (tab.getPosition()); }   -  person Puneetr90    schedule 01.02.2014
comment
Не уверен, что полностью понял, но FragmentStatePagerAdapter загружать фрагменты вокруг (вперед и назад от...) начальной позиции. Это поведение контролируется адаптером setOffscreenPageLimit(int number). В Javadoc указано, что смещение по умолчанию равно 1, что означает, что при нажатии фрагмента B после отладки будет отмечена загрузка фрагмента C... из-за этого смещения (фрагмент B был загружен, когда был загружен фрагмент A/фрагмент C).   -  person BrantApps    schedule 01.02.2014
comment
@OceanLife это было причиной. Спасибо :)   -  person Puneetr90    schedule 03.02.2014
comment
@Puneetr90, я добавил это как ответ, чтобы следующий человек, столкнувшийся с подобным поведением, мог ясно увидеть причину. Если бы вы могли принять, то это было бы очень ценно.   -  person BrantApps    schedule 03.02.2014


Ответы (1)


Не уверен, что полностью понял, но FragmentStatePagerAdapter загружать фрагменты вокруг (вперед и назад от...) начальной позиции. Это поведение контролируется адаптером setOffscreenPageLimit(int number). В Javadoc указано, что смещение по умолчанию равно 1, а это означает, что при нажатии «Frag B» последующая отладочная деятельность заметит загрузку «Frag C»… из-за этого смещения (Frag B был загружен, когда был загружен Frag A/Frag C).

person BrantApps    schedule 03.02.2014