[解決済み] AndroidでViewsではなくFragmentを使用するメリットは何ですか?
質問
を開発する場合
Android
を開発する場合、ターゲット (または最小) の sdk を 4 (API 1.6) に設定し、android compatibility package (v4) を追加して、以下のサポートを追加することができます。
Fragments
. 昨日、私はこれを実行し、無事に
Fragments
を実装し、カスタムクラスからのデータを可視化することに成功しました。
私の質問はこれです。
Fragments
を使用する利点は何でしょうか?
例えば、Foo.javaというクラスがあるとします。
public class Foo extends Fragment {
/** Title of the Foo object*/
private String title;
/** A description of Foo */
private String message;
/** Create a new Foo
* @param title
* @param message */
public Foo(String title, String message) {
this.title = title;
this.message = message;
}//Foo
/** Retrieves the View to display (supports API 1.5. To use,
* remove 'extends Fragment' from the class statement, along with
* the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)})
* @param context Used for retrieving the inflater */
public View getView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//getView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//onCreateView
}//Foo
どちらのメソッドも非常に簡単に作成でき、例えば
List<Foo>
を表示するアクティビティにおいて(例えば、プログラム的にそれぞれを
ScrollView
に追加する)ので
Fragments
は本当に便利なのか、それとも上のコードのようにViewを取得するための過度な簡略化に過ぎないのでしょうか?
どのように解決するのですか?
フラグメントを使用する主な理由は、バックスタックとライフサイクルの機能です。 それ以外では、カスタムビューはより軽量で実装が簡単です。
最初、私は実際にカスタムビューを使って電話/タブレットアプリを構築しようとしました。 すべて が表示されました。 は、シングル パネルからスプリット パネルに切り替えた場合でも、電話やタブレットで動作するように見えました。 私が問題にぶつかったのは、戻るボタンとライフ サイクルです。 私は単にビューを手動で更新していたので、ビューとその状態の履歴を追跡するものは何もありませんでした。 そのため、戻るボタンは期待どおりに機能せず、アプリを回転させるときなどのライフサイクルイベントで、最新の状態さえ再現するのが困難でした。 これを解決するために、私はカスタムビューをフラグメントでラップし、FragmentManagerを使用して、以前の状態を保存して再作成する必要がありました。
回答後に、1 年前に同様の質問に投稿したことに気づきました。 https://stackoverflow.com/a/11126397/618881
関連
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] WhatsAppでメッセージを送信する
最新
-
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 Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] EditTextをReadOnlyにする
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?