1. ホーム
  2. アンドロイド

[解決済み】Fragmentの関数でgetActivity()がnullを返す。

2022-04-12 23:41:45

質問

次のようなパブリックメソッドを持つフラグメント(F1)があります。

public void asd() {
    if (getActivity() == null) {
        Log.d("yes","it is null");
    }
}

そして、(Activityから)それを呼び出すと、はい、それはnullです...。

FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
F1 f1 = new F1();
transaction1.replace(R.id.upperPart, f1);
transaction1.commit();
f1.asd();

何かとても間違ったことをしているに違いないが、それが何なのかわからない。

解決方法は?

commit つまり、トランザクションはすぐに発生するのではなく、メインスレッドの準備ができたときに、メインスレッドの作業としてスケジュールされます。

を追加することをお勧めします。

onAttach(Activity activity)

メソッドを Fragment を呼び出し、その上にブレークポイントを置き、そのブレークポイントが asd() . を呼び出したメソッドの後で呼び出されていることがわかります。 asd() が終了します。その onAttach の呼び出しは Fragment はそのアクティビティにアタッチされ、この時点から getActivity() は非NULLを返します(注)。 onDetach() の呼び出し)。