Android ViewPager刷新Fragment数据(ViewPager获取Fragment对象)

ViewPager没有提供根据position获取Fragment的方法,单纯的用FragmentStatePagerAdapter(或者FragmentPagerAdapter)里面自己创建的Fragment集合是无法获取ViewPager里面指定位置的Fragment对象的,被这个问题困扰了一阵子,经过一番研究了制造了一个解决办法,以下是我个人的一些理解,如有错误欢迎大牛指点:

ViewPager里面的Fragment像ListView的item一样是复用的,也就是说当有“足够”个Fragment在FragmentStatePagerAdapter(或者FragmentPagerAdapter)里面存在的时候,再次翻页将不会继续创建新的Fragment,想获取到指定position的Fragment对象,我自己实现了一个类似ListView.getChildAt(index)的方法,原理就是根据:在每次ViewPager需要一个用以显示Object的时候,FragmentStatePagerAdapter的instantiateItem()函数都会被调用,重写instantiateItem(),将里面每次显示过的Fragment对象记录下来:

class MyAdapter extends FragmentStatePagerAdapter {

        private List<Fragment> mList;
        private Map<Integer, Fragment> map = new HashMap<Integer, Fragment>();

        public MyAdapter(FragmentManager fm, List<Fragment> list) {
            super(fm);
            mList = list;
        }

        @Override
        public Fragment getItem(int position) {
            return mList.get(position);
        }

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

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Fragment fragment = (Fragment) super.instantiateItem(container, position);
            //记录每个position位置最后显示的Fragment
            map.put(position, fragment);
            return fragment;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titleList.get(position).getTitle();
        }

        //获取指定位置最后显示的Fragment
        public Fragment getCurrentFragment(int index) {
            return map.get(index);
        }
    }

在Activity里面调用adapter.getCurrentFragment(index)就可以获取到指定位置的Fragment对象了,尽情的调用Fragment里面的函数来刷新数据吧~



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值