2017-11-20 3 views
1

にremoveView()を呼び出す必要があります:フラグメントjava.lang.IllegalStateException:指定された子にはすでに親があります。あなたは通りの子供の親フラグメントを起動する最初の

public void initFrag(){ 
    FragmentTransaction transaction = appContext.getSupportFragmentManager().beginTransaction(); 
        transaction.addToBackStack(null); 

        transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, 
          R.anim.fade_out); 

        transaction.replace(R.id.root_frame, uiControlTrier, UUID.randomUUID().toString()).commitAllowingStateLoss(); 
} 

、ここでフラグメントはCREATEVIEWにあります。

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    if (rootView == null) { 
     rootView = inflater.inflate(R.layout.zn_fragment_ui, null); 
     if (getArguments().getString(STEP_KEY) == null) { 
      getActivity().finish(); 
     } else { 
      initView(); 
     } 
    } 
    return rootView; 
} 

initFrag()は、ユーザの選択に応じて複数回アクティビティから呼び出すことができます。バックスタック上の複数のフラグメントにつながります。

私はバックボタンを押し

、とアプリがクラッシュ:私はこれを修正の上、他のスレッドを見てきましたが、どれもまだ働いていない

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
                     at android.view.ViewGroup.addViewInner(ViewGroup.java:4424) 
                     at android.view.ViewGroup.addView(ViewGroup.java:4265) 
                     at android.view.ViewGroup.addView(ViewGroup.java:4205) 
                     at android.view.ViewGroup.addView(ViewGroup.java:4178) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1425) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819) 
                     at android.support.v4.app.BackStackRecord.executePopOps(BackStackRecord.java:855) 
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2587) 
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377) 
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332) 
                     at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:851) 
                     at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:794) 
                     at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:181) 
                     at com.appzonegroup.zonesdk.zone.uiEngine.pageRenderer.UIFlowRenderingBase.onBackPressed(UIFlowRenderingBase.java:152) 
                     at android.app.Activity.onKeyUp(Activity.java:2730) 

+0

こんにちは、このフラグメントを別のフラグメントまたはアクティビティにネストしていますか? – abcOfJavaAndCPP

+0

アクティビティにネストしてください –

+1

これはAPIの問題だと思います。 apiレベル27に更新するとすぐに気付きました.APIレベル25にロールバックするとすべて正常に動作します。 –

答えて

1

FragmentPagerAdapterを使用する場合、同じ問題が非常によく発生します。 フレームワークで何かを作成したい場合は、作成します。キャッシングは必要ありません。

この方法では、新しいビューを作成する必要があります。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

onCreateView断片が最初に起動し、構成変更後の場合、スクリーン回転として、呼ばれています。その場合、古いビューは、もはや使用されていない以前のアクティビティへの参照を保持するため(ユーザに提示されるため)、破壊する必要があります。古いコンテキストで作成されたビューを保持すると、メモリリークが発生します。

ビューを膨らませるためにアプリケーションコンテキストを使用している何らかの理由(アプリのどこか他の場所)がありません。アクティビティコンテキストには、ビューを操作するときに必要なテーマ情報があります。

  1. 活用フレームワーク、それに対して動作しません:

    は、ここではいくつかの提案です。

  2. 作業中のコードがある場合にのみ最適化します。
関連する問題