1. ホーム
  2. android

[解決済み] Fragment lifecycle - show / hide時に呼び出されるメソッドは?

2022-11-12 11:15:27

質問

以下の方法で、NavigationDrawer内のFragmentを表示/非表示に切り替えています。

protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if ( lastTag != null && !lastTag.equals("")) {
            Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag );
            if ( lastFragment != null ) {
                transaction.hide( lastFragment );
            }
        }

        if ( fragment.isAdded() ) {
            transaction.show( fragment );
        }
        else {
            transaction.add( container, fragment, tag );
        }

        if ( addToBackStack ) {
            transaction.addToBackStack( tag );
        }

        transaction.commit();

        // set the active tag
        activeFragTag = tag;
    }

私が不明なのは、Fragmentsのライフサイクルのどのメソッドが、表示または非表示にしたときに呼び出されるかということです。 (onShow()やonHide()のようなメソッドがないため、何を使えばいいのかよくわかりません)。特定のフラグメントを表示したり隠したりするときに特定のアクションを実行したいのですが。

どのように解決すればよいですか?

アクティビティライフサイクルと同様に、Androidでは onStart() を呼び出します。 onStop() は通常、フラグメントが不可視になったときに呼び出されますが、後で呼び出すこともできます。

レイアウトによりますが、Androidは onStart() を呼び出すことができます。これは、フラグメントがまだ表示されていない場合でも、表示可能な親コンテナに属していれば可能です。例えば、これは android.support.v4.view.ViewPager をオーバーライドする必要があります。 Fragment.setUserVisibleHint() メソッドをオーバーライドする必要があります。いずれにせよ、BroadcastReceiver やその他のリスナーの登録/解除が必要な場合は、安全に onStart()onStop() メソッドが常に呼び出されるからです。

注意してください。 いくつかのフラグメントコンテナは、不可視のフラグメントを開始したままにすることができます。この状況を処理するために Fragment.onHiddenChanged(boolean hidden) . によると のドキュメントによると によると、フラグメントは が開始され、かつ可視でなければなりません(非表示ではありません)。 でなければなりません。

更新しました。 もし android.support.v4.widget.DrawerLayout を使用した場合、ドロワの下のフラグメントは、ドロワが開いている間でも、起動され、表示されたままになります。この場合 DrawerLayout.setDrawerListener() を使用し onDrawerClosed() そして onDrawerOpened() のコールバックがあります。