android fragmentstatepageradapter框架,Android 中 FragmentPagerAdapter 与 FragmentStatePagerAdapter的区别...

1、博文介绍

2、FragmentPagerAdapter中设置不让Fragment视图重新创建

c2686397f764

image.png

c2686397f764

image.png

FragmentPagerAdapter完整代码如下

/**

* 主页ViewPager适配器

* Created by _Smile on 2017/5/9.

*/

public class TabFragmentPagerAdapter extends FragmentPagerAdapter {

private FragmentManager mFragmentManager;

//保存每个Fragment的Tag,刷新页面的依据

protected SparseArray tags = new SparseArray<>();

//继承FragmentPagerAdapter类 ,并自定义的构造器

private List fragments;

public TabFragmentPagerAdapter(FragmentManager fm, List fragments) {

super(fm);

this.fragments =fragments;

mFragmentManager = fm;

}

@Override

public Fragment getItem(int position) {

return fragments.get(position);

}

@Override

public int getCount() {

return fragments.size();

}

@Override

public long getItemId(int position) {

return fragments.get(position).hashCode();

}

@Override

public int getItemPosition(Object object) {

Fragment fragment = (Fragment) object;

//如果Item对应的Tag存在,则不进行刷新

if (tags.indexOfValue(fragment.getTag()) > -1) {

return super.getItemPosition(object);

}

return POSITION_NONE;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

//得到缓存的fragment

Fragment fragment = (Fragment) super.instantiateItem(container, position);

String tag = fragment.getTag();

//保存每个Fragment的Tag

tags.put(position, tag);

return fragment;

}

//拿到指定位置的Fragment

public Fragment getFragmentByPosition(int position) {

return mFragmentManager.findFragmentByTag(tags.get(position));

}

public List getFragments(){

return mFragmentManager.getFragments();

}

//刷新指定位置的Fragment

public void notifyFragmentByPosition(int position) {

tags.removeAt(position);

notifyDataSetChanged();

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

// super.destroyItem(container, position, object);

}

@Override

public void notifyDataSetChanged() {

super.notifyDataSetChanged();

}

}

Fragmenr和Activity使用代码如下

mFragments.add(mTab_01);

mFragments.add(mTab_02);

mFragments.add(mTab_03);

mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), mFragments);

mViewPager.setOffscreenPageLimit(mFragments.size());

//设置滑动监听器

mViewPager.clearOnPageChangeListeners();

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

//滑动时 改变图标状态

@Override

public void onPageSelected(int position) {

int currentItem = mViewPager.getCurrentItem();

LogUtils.d("当前currentItem:" + currentItem + "当前position:" + position);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

......

mViewPager.setAdapter(mAdapter);

mViewPager.setCurrentItem(0);

setSelect(0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值