ビデオ: エクストリームフラグメントUIプログラミング 2025
ここで使用されるAndroidアプリケーションの例のユーザーインターフェースには、3つのパネルがあります - 項目のリスト、リスト内で選択された項目を説明する詳細パネル、詳細な詳細パネルなどが含まれています。小さなスマートフォン画面では、それぞれのパネルが別々のアクティビティである可能性があります。しかし、風景モードのタブレット画面には複数のパネルのためのスペースがあります。
下の画像は、3つのパネルのうちの2つのアプリを示しています。左側のパネルにAndroid SDKコンポーネントのリストが表示されます。右側のパネルには、左側のリストで選択されたコンポーネントの説明が表示されます。この説明は、多くのユーザーインターフェイスの一部です。
<! - 1 - >ディスプレイを作成するには、1つのアクティビティを作成します。このアクティビティには2つのフラグメントがあります。左側にフラグメントが、右側にフラグメントがあります。左パネルには、アプリケーションの実行中に同じフラグメントが表示されるため、そのフラグメントをアクティビティのレイアウトファイルに宣言できます。右パネルには一度に1つのフラグメントが表示されますが、アプリケーションの実行中にフラグメントが変更されます。右のパネルにフレームレイアウトを宣言します。
<!上記のコードでは、アンドロイド:layout_は、スクリーンを2つの半分に分割します。つまり、フラグメント要素の半分とFrameLayout要素の半分です。これらの属性を使用する戦略は、各要素に最小のゼロピクセルを割り当てることから始めることです。もちろん、ゼロピクセルは全く幅を持たないことを意味します(これは不可視と同じです)。レイアウトの2つの半分を不可視にしないようにするには、2つの半分に等しいnon-zero layout_weight値を割り当てます。重み値がゼロでない場合、各半分が展開されてレイアウト内の空き領域が満たされます。<! - 3 - >
フラグメントの完全修飾クラス名(com。allmycode。frag。ComponentNamesFragment)の使用は意図的です。省略形の名前(たとえば、ComponentNamesFragment)は、マスタードを切断しません。あなたが不思議に思うような場合、Androidの組み込みディテールElementBackgroundは、右半分(ユーザーが選択したアイテムに関する詳細を表示するもの)のようなものを一様に見せます。
アプリの主なアクティビティコードは印象的ではありません。
package com。オールマイコード。フラッグ;インポートアンドロイド。アプリ。アクティビティ;インポートアンドロイド。 os。バンドル;パブリッククラスAllPurposeActivity extends Activity {@Override protected void onCreate(Bundle savedInstanceState){super。 onCreate(savedInstanceState); setContentView(R。レイアウト。 main);}}
以下のコードには、ComponentNamesFragmentクラスが含まれています。最初の例のレイアウトのおかげで、Androidはデバイスの画面の左側にComponentNamesFragmentを作成します。
package com。オールマイコード。フラッグ;インポートアンドロイド。アプリ。 FragmentManager;インポートアンドロイド。アプリ。 FragmentTransaction;インポートアンドロイド。アプリ。 ListFragment;インポートアンドロイド。 os。バンドル;インポートアンドロイド。ビュー。見る;インポートアンドロイド。ウィジェット。 ArrayAdapter;インポートアンドロイド。ウィジェット。リストビュー;パブリッククラスComponentNamesFragment extends ListFragment {final static String [] COMPONENTS = {"Activity"、 "Service"、 "BroadcastReceiver"、 "ContentProvider"}; @Override public void onActivityCreated(Bundle savedInstanceState){super。 onActivityCreated(savedInstanceState); @Override public void onListItemClick(ListView l、View v、int index、long id){//インデックス付きフラグメントを作成するDocsFragment docsFragment =新しいDocsFragment(); Bundle args = Helper。 getBundleWithIndex(index); docsFragment。 setArguments(args); //バックスタックをクリアするFragmentManager fragmentManager = getFragmentManager(); int backStackEntryCount = fragmentManagerです。 getBackStackEntryCount(); for(int i = 0; i ArrayAdapterコンストラクタの最初のパラメータはコンテキストです。ちょっと待って!アクティビティとは異なり、フラグメントはコンテキストではありません。したがって、ArrayAdapterコンストラクタの最初のパラメータにキーワードthisを使用することはできません。幸い、フラグメントにはgetActivityメソッドがあります。 getActivityの呼び出しは、フラグメントが添付されているアクティビティを取得します。したがって、ArrayAdapterコンストラクタの最初のパラメータでは、getActivityを呼び出すことができます。もちろん、フラグメントが既存のアクティビティにアタッチされるまで、getActivityを呼び出すことはできません。そのため、フラグメントのonActivityCreatedメソッドは上でオーバーライドされています。 AndroidはフラグメントをアタッチしてアクティビティのonCreateメソッドを呼び出した後にonActivityCreatedを呼び出します。だからすべてが計画どおりに機能する。 アンドロイド。アプリ。アクティビティクラスの祖父母クラスはアンドロイドです。コンテンツ。コンテキスト。しかし、アンドロイド。アプリ。フラグメントクラスの親クラスは普通のjavaです。ラング。オブジェクト。したがって、アクティビティのコードでは、キーワードthisはコンテキストを参照します。しかし、フラグメントのコードでは、キーワードthisはコンテキストを参照しません。 上記の例では、ArrayAdapterのコンストラクターに3つのパラメーターがあります。 最初のパラメータはcontextです。これは、コンストラクタをonActivityCreatedメソッドの中に置くことを強制する厄介なパラメータです。 2番目のパラメータはsimple_list_item_1です。これは標準Androidレイアウトです。 simple_list_item_1レイアウトは、画像の左側に表示される外観を作成します。 Androidには、これらの標準レイアウトがたくさんあります。利用可能なレイアウトの概要については、Androidのデベロッパーサイトをご覧ください。 3番目のパラメータは、リストに表示されるアイテムの集合です。 この例では、これらの項目は、同じ例で宣言されているCOMPONENTS配列からのものです。 ListActivityと同様に、ListFragmentにはonListItemClickメソッドがあります。 DocsFragment、FragmentTransaction、およびFragmentManagerを使用して、クリックに反応することができます。 DocsFragmentは、上の画像の右側を表します。 フラグメント取引とは、あなたがフラグメントで行うことの束です。たとえば、あるフラグメントを別のフラグメントに置き換える設定は、トランザクションです。 フラグメントマネージャーは、その名前が示唆するものを実行します。断片の到着と出発を管理します。
上記のコードのクラスは、AndroidのListFragmentクラスを拡張しています。 ListFragmentは、リストを表示するフラグメントです。フラグメントのライフサイクルの早い段階で、上の例のコードはフラグメントのリストアアダプタ(より具体的にはArrayAdapter)を設定します。だから早い段階で「早い段階で」ですか?
