天天看點

Android java.lang.IllegalStateException: Fragment already added異常的處理

Android java.lang.IllegalStateException: Fragment already added異常的處理

當快速輕按兩下調用FragmentTransaction.add()方法添加fragmentA,而fragmentA不是每次單獨生成的,就會引起這個異常。

DialogFragment.show()内部調用了FragmentTransaction.add()方法,是以調用DialogFragment.show()方法時候也可能會出現這個異常。

/**
     * Activity 中Fragment之間的切換
     */


   private Fragment currentFragment;//主界面中目前顯示的Fragment
   fm = getSupportFragmentManager();
   R.id.cotentID  Activity中FrameLayout切換顯示Fragment

    public void SmartShow(Fragment showFrgment) {
        FragmentTransaction ft = fm.beginTransaction();
        String showName = showFrgment.getClass().getSimpleName();
        Fragment sfrgment = fm.findFragmentByTag(showName);
        if (currentFragment != null) {
            ft.hide(currentFragment);
        }
        if (sfrgment == null&&!showFrgment.isAdded()) {
            ft.add(R.id.cotentID, showFrgment, showName);
        } else {
            ft.show(sfrgment);
        }
        ft.commitAllowingStateLoss();
        currentFragment = sfrgment;
    }