版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyantan/article/details/70275640
作为一个android 开发程序员,大家都曾为Fragment重叠的问题所苦恼。目前解决方法也很多,我今天给大家介绍一个很简单的方法,不需要增加任何代码就能解决此问题。如下:
class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new Fragment1();
} else {
return new Fragment2();
}
}
@Override
public int getCount() {
return 2;
}
}
首先Fragment重叠是因为Activity维护了一系列的Fragment,再诸如内容重启时,Activity不保存Fragment的show,或hide状态,导致Fragment重叠。那么我们可以不让Activity维护Fragment,让FragmentViewPager自己维护。有人可能会问,难道每次调用getItem()方法都会重新创建一个Fragment吗?当然不是,下面我们来看下FragmentPagerAdapter的源码。
@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) {
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;
}
如果FragmentManager已存在此Fragment,则重新绑定(因为在destroyItem()方法中对Fragment进行了解绑),否则才通过getItem()方法获取Fragment。