美文网首页
FragmentPagerAdapter使用

FragmentPagerAdapter使用

作者: 河马过河 | 来源:发表于2020-04-17 10:38 被阅读0次

public class PanelViewPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> data;
    private FragmentManager fm;

    public PanelViewPagerAdapter(FragmentManager fm, List<Fragment> data) {
        super(fm);
        this.fm = fm;
        this.data = data;
    }

    @Override
    public Fragment getItem(int i) {
        return data.get(i);
    }

    @Override
    public int getCount() {
        return data == null ? 0 : data.size();
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        Fragment instantiateItem = (Fragment) super.instantiateItem(container, position);
        Fragment item = data.get(position);
        if (instantiateItem == item) {
            return instantiateItem;
        } else {
            //如果集合中对应下标的fragment和fragmentManager中的对应下标的fragment对象不一致,那么就是新添加的,所以自己add进入;
            // 这里为什么不直接调用super方法呢,因为fragment的mIndex搞的鬼,以后有机会再补一补。
            fm.beginTransaction().add(container.getId(), item)
                    .commitNowAllowingStateLoss();
            return item;
        }
    }

    @Override
    public int getItemPosition(@NonNull Object object) {
        if (object instanceof Fragment){
            Fragment fragment= (Fragment) object;
            if (!fragment.isAdded() || !data.contains(object)) {
                return PagerAdapter.POSITION_NONE;
            }
        }
        return data.indexOf(object);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        Fragment fragment = (Fragment) object;
        //如果getItemPosition中的值为PagerAdapter.POSITION_NONE,就执行该方法。
        if (data.contains(fragment)) {
            super.destroyItem(container, position, object);
            return ;
        }
        //自己执行移除。因为mFragments在删除的时候就把某个fragment对象移除了,所以一般都得自己移除在fragmentManager中的该对象。
        fm.beginTransaction().remove(fragment).commitNowAllowingStateLoss();
    }
}

相关文章

网友评论

      本文标题:FragmentPagerAdapter使用

      本文链接:https://www.haomeiwen.com/subject/txcevhtx.html