FragmentPagerAdapter动态删除和调整fragment位置的问题

来源:互联网 发布:自动装修软件 编辑:程序博客网 时间:2024/06/10 01:30

网上对FragmentPagerAdapter讲解的博客已经很多了,这里只讲重点。

设置POSITION_NONE的目的是可以执行instantiateItem,动态刷新fragment就必须要执行这一步,所以添加如下代码:

@Overridepublic int getItemPosition(Object object) {    return POSITION_NONE;}

instantiateItem在执行时会FragmentManager里面查找是否已存在对应的fragment,如果不存在,才会执行getItem,先看一下源码:

@Overridepublic Object instantiateItem(ViewGroup container, int position) {    if (mCurTransaction == null) {        mCurTransaction = mFragmentManager.beginTransaction();    }    final long itemId = getItemId(position);    // Do we already have this fragment?    String name = makeFragmentName(container.getId(), itemId);    Fragment fragment = mFragmentManager.findFragmentByTag(name);    if (fragment != null) {        if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);        mCurTransaction.attach(fragment);    } else {        fragment = getItem(position);        if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);        mCurTransaction.add(container.getId(), fragment,                makeFragmentName(container.getId(), itemId));    }    if (fragment != mCurrentPrimaryItem) {        fragment.setMenuVisibility(false);        fragment.setUserVisibleHint(false);    }    return fragment;}

为了每一个页面可以动态的获取我们想要的fragment,就必须要它执行getItem,所以需要修改getItemId,代码如下:

@Overridepublic long getItemId(int position) {    return fragments.get(position).hashCode();}

至此已经修改完毕,只需要变更list,然后notifyDataSetChanged,就可以达到想要的效果了,至于FragmentPagerAdapter的原理和每个方法的作用,就不讲解了,网上很多,就不骚扰搜索引擎了,over!!!

阅读全文
0 0