在使用fragment 动态add 或者replace fragment 后碰到过点击空白区域响应
add 或者replace 之前的 UI 或者fragment里的点击事件 ,导致异常操作!
在android-support-v4 中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) {
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;
}
}
instantiateItem 和setPrimaryItem 方法里面是通过FragmentCompat 方法来控制fragment的显示和隐藏
其实就是使用Fragment 的方法setUserVisibleHint 和setMenuVisibility 方法来控制fragment的显示和隐藏
但 在fragment里面replace或者add fragment 之前使用setUserVisibleHint 和setMenuVisibility 方法并没有起到理想的效果!
可能是我没有正确使用 setUserVisibleHint 和setMenuVisibility 方法吧!
FragmentPagerAdapter 管理fragment 在viewpager 里面切换没有点击区域和fragment重叠的问题!
但是将fragment直接detach掉 每切换一次就要new一个fragment 不符合项目需求!
没办法只能在顶层的fragment 上接收onclick 点击事件
在oncreateview里面
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view.setOnclickListener(null);
return view;
}
view 返回之前加上全局视图点击监听,防止点击事件被之前的fragment或者activity视图处理产生异常操作!
暂时只能这样!内位高手有什么好的解决方法指导下呵呵!