android fragment 切换时上下层视图点击区域冲突

版权声明:版权声明 https://blog.csdn.net/duty_is_codeing/article/details/10416053

在使用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视图处理产生异常操作!

暂时只能这样!内位高手有什么好的解决方法指导下呵呵!





猜你喜欢

转载自blog.csdn.net/duty_is_codeing/article/details/10416053