web-dev-qa-db-ja.com

Android非UIフラグメントの使用法

フラグメントに関するAndroidドキュメント を確認しています。フラグメントのUIを定義するレイアウトは、アクティビティのレイアウトで、別の.xmlファイルで定義することも、まったく定義しないこともできます。

ドキュメントによると

フラグメントを使用して、追加のUIを表示せずにアクティビティのバックグラウンド動作を提供することもできます。

アクティビティ内でさらにいくつかの関数を定義する代わりに、別のフラグメントを使用してアクティビティに機能を追加する必要があるのはなぜですか?そのような非UIフラグメントは、モジュール性のためだけに使用されますか?そのようなアプローチを採用する別の理由はありますか? UI以外のフラグメントを使用するのが適切な場合の例をいただければ幸いです。

よろしくお願いします。

22
anna

これは保持されたフラグメントに関するものだと思います。フラグメント内ではsetRetainedInstance(true)を呼び出すことができます。これにより、構成の変更中にフラグメントが再作成されなくなります。通常、デバイスを回転させると、すべてのフラグメントが再作成されます。 onCreate()内でsetRetainedInstance(true)を呼び出すと、フラグメントインスタンスは再作成されません。

それの用途は何ですか? -フラグメント内にデータや配列などを配置でき、構成の変更中に破壊されることはありません。このようなフラグメント内に非同期タスクを配置することもできます。メインアクティビティがローテーションした後でも、フラグメント内の非同期タスクはその結果を提供できます。

フラグメントのもう1つの便利な機能は、複数のアクティビティでフラグメントを簡単に再利用できることです。これは、UI以外のフラグメント内にいくつかの一般的なロジックを配置できることを意味します。アクティビティの基本クラスでそれを達成すると言うことができますが、拡張できるクラスは1つだけです。

グーグルからの簡単な例(実際には保持されたフラグメント内のスレッドを使用):

https://Android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/Android/apis/app/FragmentRetainInstance.Java

27
marcinj