fragment正确使用

近期由于使用单activity和多fragment的框架结构,但是在多指滑动,多点触控时,在fragment的show,hide方法会出现重复添加的异常,Fragment already added,就是相同的fragment在同一时间添加了多个导致这个异常。

  通过自己的整理写了一个公共的fragment加载的方法,有需要的可以用一下。亲测好用。
private Fragment currentShowFragment, aFragment, bFragment, cFragment;

private synchronized void showCustomFragment(Fragment showFragment, FragmentManager fragmentManager) {
        if (currentShowFragment != null && showFragment == currentShowFragment) {
            return;
        }
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        hideAllFragment(transaction);
        Fragment tag = fragmentManager.findFragmentByTag(showFragment.getClass().getName());
        if (tag == null && !showFragment.isAdded()) {
            transaction.add(R.id.fragment_base, showFragment, showFragment.getClass().getName());
        }
        transaction.show(showFragment);
        transaction.addToBackStack(null);
        transaction.commitNowAllowingStateLoss();
        currentShowFragment = showFragment;
    }

/**
     * 隐藏全部fragment
     *
     * @param transaction transaction
     */
    private void hideAllFragment(FragmentTransaction transaction) {
        if (transaction == null) {
            Log.w(TAG, "hideAllFragment: transaction is null");
            return;
        }
        if (aFragment != null && aFragment.isAdded()) {
            transaction.hide(aFragment);
        }
        if (bFragment != null && bFragment.isAdded()) {
            transaction.hide(bFragment);
        }
        if (cFragment != null && cFragment.isAdded()) {
            transaction.hide(cFragment);
        }
        //...
    }

showCustomFragment方法就是调用fragment显示的方法,直接使用即可。
hideAllFragment方法是把其他的fragment进行隐藏hide处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。