[解決済み] 新しいAndroid Fragmentをインスタンス化するためのベストプラクティス
質問
アプリケーションで新しいフラグメントをインスタンス化するために、2つの一般的な方法を見たことがあります。
Fragment newFragment = new MyFragment();
そして
Fragment newFragment = MyFragment.newInstance();
2つ目のオプションは、静的メソッドを使用するものです。
newInstance()
と
一般に
には、以下のメソッドが含まれています。
public static Fragment newInstance()
{
MyFragment myFragment = new MyFragment();
return myFragment;
}
当初は、newInstance()メソッドをオーバーロードすることで、Fragmentの新しいインスタンスを柔軟に作成できることが主な利点だと考えていました。
何か見逃してない?
一方のアプローチと他方のアプローチのメリットは何でしょうか?それとも、単に良い練習方法なのでしょうか?
どのように解決するのか?
Androidが後からFragmentを再作成する場合、Fragmentの無引数コンストラクタを呼び出すことになります。そのため、コンストラクタをオーバーロードすることは解決策になりません。
とはいえ、AndroidによってFragmentが再作成された後でも利用できるように、Fragmentにものを渡す方法は、バンドルに
setArguments
メソッドを使用します。
つまり、例えば、フラグメントに整数を渡したい場合は、次のような使い方をします。
public static MyFragment newInstance(int someInt) {
MyFragment myFragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("someInt", someInt);
myFragment.setArguments(args);
return myFragment;
}
そして、この後のFragmentでは
onCreate()
を使えば、その整数にアクセスできる。
getArguments().getInt("someInt", 0);
このBundleは、Androidによって何らかの方法でFragmentが再作成された場合でも、利用可能です。
また、注意してください。
setArguments
は、FragmentがActivityにアタッチされる前にのみ呼び出すことができます。
この方法は、android developer referenceにも記載されています。 https://developer.android.com/reference/android/app/Fragment.html
関連
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] Android Fragment onAttach() 非推奨
-
telnet'が内部コマンドまたは外部コマンドとして認識されない 解決方法
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み] AndroidでEditTextのテキスト長を制限する最も良い方法は何ですか?
-
[解決済み] AndroidでFragmentにオプションメニューを追加する方法
-
[解決済み] Androidでアクティビティからフラグメントにデータを送信する
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】ViewPagerを動的に更新しますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
android:EMSのプロパティ
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
Android カスタムスピナーコントロールのドロップダウン・ボックスの実装
-
Android ProgressBarのスタイルカラーを変更する
-
[解決済み] FragmentのsetRetainInstance(boolean)を理解する。
-
[解決済み] フラグメントで非デフォルトのコンストラクタを避けたい理由は?