[解決済み] JetpackのAndroid Navigationコンポーネントでフラグメントを破壊/再現する
質問
私は ナビゲーションをJetpackのアーキテクチャコンポーネント を既存のアプリに実装しようとしています。
私は単一のアクティビティアプリを持っており、メインフラグメント (
ListFragment
) はアイテムのリストです。現在、ユーザーがリスト アイテムをタップすると、2 番目のフラグメントが、スタックに
fragmentTransaction.add(R.id.main, detailFragment)
. そのため、戻るが押されると
DetailFragment
が切り離され
ListFragment
が再び表示される。
Navigationアーキテクチャでは、これは自動的に処理されます。新しいフラグメントを追加する代わりに、それは
に置き換えられます。
に置き換えられるので、フラグメントビューは破棄されます。
onDestroyView()
が呼び出され
onCreateView()
はビューを再作成するためにバックが押されたときに呼び出されます。
で使われる良いパターンだと理解しています。 ライブデータ と ビューモデル を使用して必要以上のメモリを使用しないようにしていますが、私の場合、リストのレイアウトが複雑で、それを膨らませるのに時間とCPUがかかるため、これは厄介です。また、リストのスクロール位置を保存して、ユーザーがフラグメントを去ったのと同じ位置に再びスクロールする必要があります。それは可能ですが、それはより良い方法が存在する必要があるように思われます。
私は、フラグメントのプライベートフィールドにビューを保存し、それを
onCreateView()
はすでにありますが、アンチパターンのようです。
private View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_list, container, false);
//...
}
return view;
}
レイアウトの再膨張を避けるために、他にもっとエレガントな方法はないでしょうか?
どのように解決するのですか?
イアン・レイク
Googleから私たちができることを私に答えた
ビューを変数に格納する
そして
の代わりに
を使うことで、新しいレイアウトを膨らませることができます。
を返すだけです。
のインスタンスを返します。
保存されたビュー
で
onCreateView()
出典 https://twitter.com/ianhlake/status/1103522856535638016
リークカナリア はこれをリークと表示するかもしれませんが、その 偽陽性 ..
関連
-
[解決済み] HttpPostによる画像送信
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio