关于fragmentPagerAdapter的冲突问题
2016-06-16 10:04
609 查看
fragmentPagerAdapter是继承了PagerAdapter,这个类的作用就是用于滑动跳转Fragment,但是这个类是V4包里独有的,
android app包里并没有这个类,那么问题就来了,当自己前面用的Fragment以及fragmentmanager都是app包下的,两者无法兼容,那该怎么办?
本人找了两种办法解决这个方案:第一种便是将所有的fragment全部换成V4包下的,但是这样也会有许多不兼容的因素出现。
第二种就是打开fragmentPagerAdapter这个类的源码,然后自己新建一个类,将它copy到这个类里,然后将里面所有V4的包全部改成app的,代码如下:
public class MyPageAdapter extends PagerAdapter { private final FragmentManager mFragmentManager; private FragmentTransaction mCurTransaction = null; private Fragment mCurrentPrimaryItem = null; private List<Fragment> fragmentList; public MyPageAdapter(FragmentManager fm, List<Fragment> fragmentList) { mFragmentManager = fm; this.fragmentList = fragmentList; } public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Override public 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) { mCurTransaction.attach(fragment); } else { fragment = getItem(position); mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId)); } if (fragment != mCurrentPrimaryItem) { fragment.setMenuVisibility(false); fragment.setUserVisibleHint(false); } return fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { if (mCurTransaction == null) { mCurTransaction = mFragmentManager.beginTransaction(); } mCurTransaction.detach((Fragment)object); } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { Fragment fragment = (Fragment)object; if (fragment != mCurrentPrimaryItem) { if (mCurrentPrimaryItem != null) { mCurrentPrimaryItem.setMenuVisibility(false); mCurrentPrimaryItem.setUserVisibleHint(false); } if (fragment != null) { fragment.setMenuVisibility(true); fragment.setUserVisibleHint(true); } mCurrentPrimaryItem = fragment; } } @Override public void finishUpdate(ViewGroup container) { if (mCurTransaction != null) { mCurTransaction.commitAllowingStateLoss(); mCurTransaction = null; mFragmentManager.executePendingTransactions(); } } @Override public boolean isViewFromObject(View view, Object object) { return ((Fragment)object).getView() == view; } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } /** * Return a unique identifier for the item at the given position. * * <p>The default implementation returns the given position. * Subclasses should override this method if the positions of items can change.</p> * * @param position Position within this adapter * @return Unique identifier for the item at position */ public long getItemId(int position) { return position; } private static String makeFragmentName(int viewId, long id) { return "android:switcher:" + viewId + ":" + id; } }如此便解决了fragmentPagerAdapter冲突的问题。
相关文章推荐
- PHPStorm显示代码行号设置
- [YII2] 自定义组件,在YII框架中正常使用
- TFTP配置
- php 访问对象的属性(当属性的键名称为数字时)的方法 {}
- ThinkPHP空操作与命名空间
- php中 -> 和 => 和 :: 的用法 以及 self 和 $this 的用法
- ThinkPHP 控制器
- php经典算法
- [李景山php]每天laravel-20160901|Dispatcher-1
- [李景山php]每天laravel-20160901|Dispatcher-1
- [转] PHP开发通用型标题图片功能
- [李景山php]每天laravel-20160831|EventServiceProvider
- [李景山php]每天laravel-20160831|EventServiceProvider
- PHP中PHP_INT_SIZE和PHP_INT_MAX常量
- PHP数据类型有哪些?
- phpstorm配置xdebug
- 使用TinkPHP实现品字形布局
- ThinkPHP框架基础
- phpstorm
- Discuz X3.1 使用 composer安装第三方类库(php libraries)