美文网首页android开发技巧
ViewPager+Fragment数据传递和动态刷新Fragm

ViewPager+Fragment数据传递和动态刷新Fragm

作者: Taurus_z | 来源:发表于2018-03-07 10:12 被阅读1945次

    1、Fragment的实例化
    主要是统一Fragment的实例化工作。如果Fragment需要外部传递参数,在此函数中要构造相关参数。

        //传输数据
        public static HotFragment newInstance(int osId) {
            HotFragment f = new HotFragment();
            Bundle b = new Bundle();
            b.putInt("osId", osId);
            f.setArguments(b);
            return f;
        }
    

    2、Fragment参数的获取
    一定要在onCreate方法获取参数。有很多同学可能在onCreateView中获取参数,而此方法在某些状态下并不会被调用,导致数据丢失。

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            Bundle arguments = getArguments();
            if (arguments != null) {
                mOsId = arguments.getInt("osId", 0);
            }
        }
    

    3、Fragment参数的更新
    更新Fragment内部成员变量的同时也要更新args参数中的值。此步骤要和ViewPager适配器配合使用,实现Fragment动态刷新。

        //更新数据
        public void updateArguments(int pageType) {
            this.mOsId = pageType;
            Bundle args = getArguments();
            if (args != null) {
                args.putInt("osId", pageType);
            }
        }
    

    下面描述ViewPager适配器写法,以FragmentPagerAdapter适配器为例子。
    1、getItem
    此方法必须实现,返回具体Fragment,并且初始化Fragment需要的参数。

        @Override
        public Fragment getItem(int position) {
            return HotFragment.newInstance(mTitle.get(position).getCode());
        }
    

    2、instantiateItem
    如果你要动态刷新数据,必须实现此方法,并且仅能在此方法里,不能是getItem。否则调用notifyDataSetChanged无效。

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            HotFragment fragment = (HotFragment) super.instantiateItem(container, position);
            fragment.updateArguments(mTitle.get(position).getCode());
            return fragment;
        }
    

    3、getItemPosition
    返回PagerAdapter.POSITION_NONE保证调用notifyDataSetChanged刷新Fragment。

    @Override
        public int getItemPosition(Object object) {
            return PagerAdapter.POSITION_NONE;
        }
    

    相关文章

      网友评论

        本文标题:ViewPager+Fragment数据传递和动态刷新Fragm

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