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中加入一句:

posted @ 2015-12-25 10:54  shoneworn  阅读(1119)  评论(0编辑  收藏  举报