Android API 11以降で、GoogleはFragment
という新しいクラスをリリースしました。
ビデオでは、グーグルは可能な限り(= link1 、 link2 )アクティビティの代わりにフラグメントを使用するべきですが、その理由を正確に説明していません。
フラグメントの目的とその使用方法は何ですか(単純なビュー/レイアウトで簡単に達成できるUIの例以外)。
私の質問は断片についてです。
ボーナス質問:
#1と#2フラグメントを使用する目的は何ですか?また、アクティビティ/ビュー/レイアウトを使用する場合と比較してフラグメントを使用する利点と欠点は何ですか?
フラグメントは、再利用可能なユーザーインターフェースを作成するためのAndroidのソリューションです。アクティビティやレイアウトを使用しても(たとえば、インクルードを使用して)同じことを実現できます。しかしながら;フラグメントは、HoneyCombから、そしてそれ以降まで、Android APIに組み込まれています。詳しく説明しましょう。
ActionBar
。タブを上に移動してアプリケーションをナビゲートしたい場合は、ActionBar.TabListener
インターフェースがFragmentTransaction
メソッドへの入力引数としてonTabSelected
を与えることがすぐにわかります。あなたはおそらくこれを無視して何か他のことをして賢いことができますが、あなたはそれに対してではなく、APIに対して働いているでしょう。
FragmentManager
はあなたのために非常に賢い方法で"戻る"を取り扱います。戻るとは、通常の活動のように最後の活動に戻ることを意味するのではありません。前のフラグメント状態に戻ることを意味します。
スワイプインターフェースを作成するには、クールなViewPager
をFragmentPagerAdapter
と一緒に使用できます。 FragmentPagerAdapter
コードは通常のアダプタよりもはるかにクリーンであり、個々のフラグメントのインスタンス化を制御します。
あなたが携帯電話とタブレットの両方のためのアプリケーションを作成しようとするときあなたがフラグメントを使うならばあなたの人生はずっと楽になるでしょう。フラグメントはHoneycomb + APIと非常に密接に結び付いているので、コードを再利用するためにも電話でそれらを使用したいと思うでしょう。それが互換性ライブラリが便利になるところです。
あなたは電話だけのために意図されたアプリケーションのために断片さえ使用することができてそしてそうすべきです。あなたが念頭に置いて移植性を持っている場合。私はActionBarSherlock
と互換性ライブラリを使用して「ICSに見える」アプリを作成します。これはバージョン1.6までずっと同じように見えます。タブ、オーバーフロー、分割アクションバー、ビューページャなどを含むActionBar
のような最新の機能を利用できます。
ボーナス2
フラグメント間で通信するための最良の方法はインテントです。フラグメントの中で何かを押すと、通常はデータが入ったStartActivity()
を呼び出します。意図はあなたが立ち上げる活動のすべての断片に渡されます。
どのビデオを参照しているのかわからないが、アクティビティではなくフラグメントを使用するべきだと言っているのではないかと思います。これらは直接互換性がないからです。 Dev Guideには実際にはかなり 詳細なエントリ があります。詳細についてはそれを読むことを検討してください。
つまり、フラグメントはアクティビティの内部に存在し、各アクティビティは多数のフラグメントをホストできます。アクティビティと同様に、特定のライフサイクルがあります。アクティビティとは異なり、それらは最上位のアプリケーションコンポーネントではありません。フラグメントの利点には、コードの再利用やモジュール化(たとえば、多くのアクティビティで同じリストビューを使用すること)などがあります。これには、マルチペインインターフェイスを構築する機能(主にタブレットで役立ちます)が含まれます。主な不利な点は、(いくらか)複雑さが増すことです。一般的に、非標準の堅牢性の低い方法で(カスタム)ビューで同じことを達成できます。
フラグメントは、よりモジュール化されたアクティビティデザインを可能にする、アクティビティに配置できるアプリケーションのユーザインタフェースまたは動作の一部です。フラグメントが一種のサブアクティビティであると言っても間違いではありません。
以下はフラグメントに関する重要な点です。
フラグメントには独自のレイアウトと独自のライフサイクルコールバックを持つ独自の動作があります。
アクティビティの実行中にアクティビティ内のフラグメントを追加または削除できます。
単一のアクティビティで複数のフラグメントを組み合わせて、マルチペインUIを構築できます。
フラグメントは複数のアクティビティで使用できます。
フラグメントのライフサイクルは、そのホストアクティビティのライフサイクルと密接に関連しています。
アクティビティが一時停止されると、そのアクティビティで利用可能なすべてのフラグメントも停止されます。
フラグメントは、ユーザーインターフェイスコンポーネントを持たない動作を実装できます。
フラグメントは、APIバージョン11で Android 3 (Honeycomb)でAndroid APIに追加されました。
詳しくは公式サイトFragmentsをご覧ください。
これは私がフラグメントで見つけた重要な情報です:
歴史的にAndroidアプリの各画面は別々のActivityとして実装されていました。 Android Intentメカニズムでは、アクティビティ間で参照型(つまりオブジェクト)を直接渡すことが許可されていないため、画面間で情報をやり取りする際に問題が生じます。代わりに、オブジェクトをシリアル化するか、グローバルにアクセス可能な参照を利用可能にする必要があります。
各スクリーンを別々のフラグメントにすることで、このデータ通過の頭痛が完全に回避されます。フラグメントは常に特定のアクティビティのコンテキスト内に存在し、常にそのアクティビティにアクセスできます。アクティビティ内に関心のある情報を格納することによって、各画面のフラグメントは、アクティビティを通じてオブジェクト参照に簡単にアクセスできます。
ソース: https://www.pluralsight.com/blog/software-development/Android-fragments
フラグメントは、すべてのページでナビゲーションドロワーを維持したい場合など、特に便利です。あなたが欲しいどんな断片でもフレームレイアウトを膨らませることができて、それでもナビゲーション引き出しにアクセスすることができます。
アクティビティを使用したことがある場合は、引き出しをすべてのアクティビティで保持しなければならず、冗長なコードになります。これはフラグメントの興味深い使い方の1つです。
私はAndroidの初心者ですが、それでもフラグメントがこの方法で役立つと思います。
私はこれが死についてすでに議論されていることを知っています、しかし私はもう少しポイントを加えたいと思います:
フラグはMenu
sを生成するために使用することができ、MenuItem
クリックを自分で処理することができます。このようにあなたの活動のためのさらなる変調オプションを与えます。あなたのアクティビティがそれを知らなくてもContextualActionBarなどを行うことができ、基本的にあなたのアクティビティが扱う基本的なもの(ナビゲーション/設定/情報)から切り離すことができます。
子の断片を持つ親の断片は、コンポーネントをモジュール化するためのさらなるオプションを提供します。例えば。あなたは簡単にFragsを入れ替えたり、Pagerの中に新しいFragsを入れたり、削除したり、並べ替えたりすることができます。あなたの活動がそれについて何かを知ることなしにすべてはただより高いレベルのものに焦点を合わせています。
アクティビティはツールバーの付いたアプリの全画面コンポーネントです。それ以外のものはすべてフラグメントであることが望ましいです。ツールバーを使用した1つのフルスクリーンの親アクティビティには、複数のペイン、スクロール可能なページ、ダイアログなど(すべてのフラグメント)を含めることができ、それらすべてに親からアクセスして親を介して通信できます。
例:
活動A、活動B、活動C:
vs
活動A、フラグメント1、フラグメント2、フラグメント3:
フラグメントはアクティビティ内にあります。
活動はそれ自身の上に生きている間。
フラグメントはアクティビティ内にあり、次のものがあります。
Fragmentsは、それが属するメインアクティビティのサブアクティビティと考えてください。それ自体は存在できず、何度も何度も呼び出したり再利用したりすることができます。お役に立てれば :)
1.フラグメントを使用する目的は?