[解決済み] Fragment lifecycle - show / hide時に呼び出されるメソッドは?
質問
以下の方法で、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()
のコールバックがあります。
関連
-
[解決済み] FragmentでonActivityResultが呼び出されない
-
[解決済み] フラグメントからアクティビティメソッドを呼び出す
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] グリッドビューの高さが削減される
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] Android: xml リソースからの整数値