ViewPager+Fragment数据传递和动态刷新Fragment数据 | 您所在的位置:网站首页 › fragment刷新当前界面 › ViewPager+Fragment数据传递和动态刷新Fragment数据 |
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 实验室设备网 版权所有 |