ViewPager+Fragment数据传递和动态刷新Fragment数据 您所在的位置:网站首页 fragment刷新当前界面 ViewPager+Fragment数据传递和动态刷新Fragment数据

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

2023-03-27 20:13| 来源: 网络整理| 查看: 265

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有