android——fragment切换后点击事件/区域冲突问题
前面写了一篇关于fragment详解的文章。但有小伙伴在使用的时候发现。切换完成后,点击空白区域或者底部的时候,可能出现点击区域冲突的问题。就是在新的fragment中,点击底部的空白区域,出发了上一个fragment的点击事件。那么,这到底是怎么一回事呢?
先来看一下v4包中 fragmentPageAdapter
@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) { FragmentCompat.setMenuVisibility(fragment, false); FragmentCompat.setUserVisibleHint(fragment, false); } return fragment; } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { Fragment fragment = (Fragment)object; if (fragment != mCurrentPrimaryItem) { if (mCurrentPrimaryItem != null) { FragmentCompat.setMenuVisibility(mCurrentPrimaryItem, false); FragmentCompat.setUserVisibleHint(mCurrentPrimaryItem, false); } if (fragment != null) { FragmentCompat.setMenuVisibility(fragment, true); FragmentCompat.setUserVisibleHint(fragment, true); } mCurrentPrimaryItem = fragment; } }
从上面可以看到,上一个fragment的显示隐藏控制还是很复杂的。
FragmentCompat.setMenuVisibility(fragment, false); FragmentCompat.setUserVisibleHint(fragment, false);
废话不多说:
解决办法
在oncreateview中加入一句:
不积跬步,无以至千里。