FragmentStatePagerAdapter returns wrong positions in getItem

巧了我就是萌 提交于 2019-12-12 04:33:44

问题


I'm using a FragmentStatePagerAdapter. The getItem(int position) returns wrong positions. I have 5 fragments. This is the position when I change the fragments:

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!

Here is the code for my Adapter:

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];
    }
}

回答1:


It is normal behavior. By default FragmentStatePagerAdapter keep link for current displayed fragment and his neighbors. At first adapter create Fragment0 and Fragment1. When you swipe to Fragment1, he will create Fragment2 and call getItem(2) for this. After swipe to Fragment2, adapter will destroy Fragment0 and create Fragment3.



来源:https://stackoverflow.com/questions/43529254/fragmentstatepageradapter-returns-wrong-positions-in-getitem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!