2つのフラグメントを生成する
2ペイン表示は、2つのFragmentオブジェクトを表示することで実現しています。このような2画面構成は、Fragmentならではのもので、従来のActivityベースでは実現できない構成です。
Fragmentを生成する方法には、他のGUIウィジェットと同様に2通りの方法があります。レイアウトファイルに記述する方法と、コードで実装する方法です。今回のアプリでは、レイアウトファイルに記述する方法を紹介しましょう。2ペイン表示するレイアウトファイルは、次のとおりです。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <fragment android:id="@+id/eki_list" android:name="com.rakuraku.android.ekimap.EkiListFragment" android:layout_height="fill_parent" android:layout_width="200dp" android:layout_marginRight="10dp"/> <fragment android:id="@+id/map" android:name="com.rakuraku.android.ekimap.MyMapFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout >
全体のレイアウトをLinearLayoutとして、水平方向にFragmentが並ぶようにしています。また、一覧表示するFragmentは、横幅を200dp、地図画面とのマージンのlayout_marginRightを10dpとしました。
このdpという単位は、Density-independent Pixels(密度に非依存のピクセル)の略で、画面の解像度の物理的な密度に応じた抽象単位になります。従って、dpで指定しておけば、解像度が異なる画面であっても、物理的に同じサイズで表示されます。
<fragment>タグのandroid:name属性に、クラス名を指定します。このようにすると、メインのActivityからsetContentViewメソッドが実行された際に、fragmentオブジェクトが生成されることになります。
起動すると、次のような表示になります。EkiListFragmentには何もデータをセットしていませんが、読み込み中を示すメッセージと画像が表示されています。これもデフォルトで用意されている機能です。
ListFragmentにデータをセットする
次に、EkiListFragmentに最寄り駅情報をセットしてみましょう。ListFragmentに一覧表示するデータをセットするには、Adapterというインターフェースを実装したアダプターオブジェクトを用います。
Adapterインターフェースは、ListFragmentと実際のデータとの橋渡しを担うものです。このインターフェースを実装したオブジェクトであれば、どのようなクラスでも一覧表示できます。
今回のアプリでは、アダプターオブジェクトとして、SDKに用意されているArrayAdapterというクラスを利用します。ArrayAdapterは、その名のとおり、配列やListオブジェクトのデータをセットするのに便利なクラスです。