web-dev-qa-db-ja.com

nullを返すgetParentFragment

Fragmentを持つFrameLayoutがあります。この最初のフラグメント(A)は、Framelayout内に別のフラグメント(B)をロードします。内部フラグメント(B)からgetParentFragmentを呼び出すと、nullが返されます。この方法はどのように適切に使用されるべきですか?

29
Gonzalo

getParentFragment()は、APIレベル17(Android 4.2)で導入されました。 Android 4.2はネストされたフラグメント(他のフラグメントを含むフラグメント)の概念を導入しました。フラグメントにActivityである親がある場合、これを呼び出すとnullになります。

this をご覧ください。

サポートライブラリを使用している場合、getParent()を使用できます。フラグメントトランザクションの実行中にgetChildFragmentManager()を使用する必要がある場合があります。 this を参照してください

47
Eurig Jones

私の場合、fragmentAはfragmentBにネストされていますが、FragmentAでgetParentFragmentを呼び出した後でもnullを取得します。最後に、FragmentBでgetFragmentManagerではなくgetChildFragmentManagerを使用する必要があることがわかりました。

これを確認してください getSupportFragmentManager()とgetChildFragmentManager()の違いは何ですか?

30
muyiou

私は同じ問題に直面し、getChildFragmentManager()を使用して親フラグメントの2番目のフラグメントをホストすることで問題を修正しましたが、null値を取得できません...

親フラグメント

  SignUpFragment signUpFragment = new SignUpFragment();
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
            .addToBackStack(null).commit();

子フラグメント:私が使用したのはダイアログです

 HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
    hospitalCardDialog.show(getChildFragmentManager(), "");
3
Ameen Maheen

1つの助けとなったのは、アダプターを作成するときにgetChildFragmentManager()を使用することです。

アダプタを使用していない場合は、トランザクションを実行するときにgetChildFragmentManager()を使用するだけです。

setTargetFragment()は、フラグメントのmoveState()でエラーが発生するため推奨されません(フラグメントはFragmentManagerに結び付けられる必要があるため)

2
Aibol Kussain