关于fragmentPagerAdapter的冲突问题
来源:互联网 发布:360手机代工厂 知乎 编辑:程序博客网 时间:2024/06/07 21:59
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冲突的问题。
0 0
- 关于fragmentPagerAdapter的冲突问题
- 关于app.FragmentManager和v4包的FragmentPagerAdapter冲突
- FragmentPagerAdapter 遇到的问题
- 关于FragmentPagerAdapter通知数据改变不刷新的问题
- 关于Git的冲突问题
- 关于Myeclipse冲突的问题
- 关于热键冲突的问题
- 关于FragmentPagerAdapter的方法讲解
- FragmentPagerAdapter 动态删除的问题
- 关于 vs2008 与 vs2005 的冲突问题
- 关于jquery插件冲突的问题。
- 关于文件读写冲突问题的探索
- 关于多JQUERY冲突的问题
- 关于eclipse快捷键冲突的问题
- 关于jquery命名的冲突问题
- 关于svn冲突的开发问题
- 关于onTouchEvent跟OnClickListener冲突的问题
- 关于Android引用包冲突的问题。
- msyql 5.7 group by
- Binder学习资料整理
- 网络与线程编程(第八节:查询机制)
- setNeedsDisplay和setNeedsLayout
- Oracle树查询及函数
- 关于fragmentPagerAdapter的冲突问题
- 查看bundleId和info.plist文件内容
- 每日一命令(10)cat (concatenate files and print on the standard output)
- hibernate 调用存储过程
- Subline Text 3注册码
- VB.net学习笔记(三十)认识线程池
- ios学习路线—Objective-C(NSObject)
- XMLHTTPRequest状态status完整列表
- OC中的位移枚举