1page.title=レイアウト 2page.tags=view,viewgroup 3@jd:body 4 5<div id="qv-wrapper"> 6<div id="qv"> 7 <h2>本書の内容</h2> 8<ol> 9 <li><a href="#write">XML の記述</a></li> 10 <li><a href="#load">XML リソースの読み込み</a></li> 11 <li><a href="#attributes">属性</a> 12 <ol> 13 <li><a href="#id">ID</a></li> 14 <li><a href="#layout-params">レイアウト パラメータ</a></li> 15 </ol> 16 </li> 17 <li><a href="#Position">レイアウトの位置</a></li> 18 <li><a href="#SizePaddingMargins">サイズ、パディング、マージン</a></li> 19 <li><a href="#CommonLayouts">共通レイアウト</a></li> 20 <li><a href="#AdapterViews">アダプタを使ったレイアウトをビルドする</a> 21 <ol> 22 <li><a href="#FillingTheLayout">データを使ったアダプタビューを書き込む</a></li> 23 <li><a href="#HandlingUserSelections">クリック イベントを処理する</a></li> 24 </ol> 25 </li> 26</ol> 27 28 <h2>キークラス</h2> 29 <ol> 30 <li>{@link android.view.View}</li> 31 <li>{@link android.view.ViewGroup}</li> 32 <li>{@link android.view.ViewGroup.LayoutParams}</li> 33 </ol> 34 35 <h2>関連ドキュメント</h2> 36 <ol> 37 <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">簡単なユーザー インターフェースをビルドする</a> 38</li> </div> 39</div> 40 41<p>レイアウトでは、<a href="{@docRoot}guide/components/activities.html">アクティビティ</a>や<a href="{@docRoot}guide/topics/appwidgets/index.html">アプリ ウィジェット</a>の UI のような、ユーザー インターフェースの視覚的構造が定義されます。次の 2 つの方法でレイアウトを宣言できます。 42</p> 43<ul> 44<li><strong>XML で UI 要素を宣言する</strong>。Android では、ウィジェットやレイアウトなどの View クラスとサブクラスに対応する単純な XML ボキャブラリが提供されます。 45</li> 46<li><strong>実行時にレイアウト要素のインスタンスを作成する</strong>。アプリケーションで View と ViewGroup オブジェクトを作成できます。また、プログラムを使ってプロパティを操作することもできます。 47 </li> 48</ul> 49 50<p>Android フレームワークでは、アプリケーション UI の宣言と管理に、これらのいずれかのメソッドまたは両方のメソッドを柔軟に使うことができます。たとえば、レイアウトに表示されるスクリーン要素やそのプロパティを含む、アプリケーションのデフォルト レイアウトを XML で宣言できます。スクリーン オブジェクトの状態を変更するコードをアプリケーション内で追加できます(実行時の XML での宣言を含む)。 </p> 51 52<div class="sidebox-wrapper"> 53<div class="sidebox"> 54 <ul> 55 <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a> では、XML ファイルを開いて [<strong>レイアウト</strong>] タブを選択すると、XML のレイアウト プレビューが提供されます。 56 57</li> 58 <li>レイアウトのデバッグに、<a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Hierarchy Viewer</a> ツールを使うこともできます。このツールでは、レイアウト プロパティ値の表示、パディングやマージンのインジケーターを使ったワイヤーフレームの描画、エミュレータや端末でデバッグする間のレンダリングされた全画面表示が提供されます。 59 60 61 62</li> 63 <li><a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> ツールを使うと、効率性の低下やその他の問題について、レイアウトや階層を素早く解析できます。 64</li> 65</div> 66</div> 67 68<p>XML で UI を宣言する利点は、動作を制御するコードとアプリケーションの表示をうまく切り離すことができる点です。UI の記述は、アプリケーション コード外にあるため、ソースコードの変更や再コンパイルをすることなく、記述を修正したり改良したりできます。たとえば、異なる画面の向き、端末の画面サイズ、言語に対して XML レイアウトを作成できます。XML でレイアウトを宣言すると、UI の構造を簡単に視覚化できるため、問題のデバッグも簡単です。そのため、本書では XML でレイアウトを宣言する方法を中心に説明しています。実行時に View オブジェクトのインスタンスを作成することに関心がある場合は、{@link android.view.ViewGroup} と {@link android.view.View} クラス参照をご覧ください。 69 70</p> 71 72<p>通常、UI 要素を宣言する XML ボキャブラリは、クラスとメソッドの構造と命名に厳密に従っており、要素名はクラス名に、属性名はメソッドに対応しています。実際、ほとんどの場合、直接的に対応しているため、クラスメソッドに対応する XML 属性を推測したり、与えられた XML 要素に対応するクラスを推測したりできます。ただし、すべてのボキャブラリが同一とは限りません。場合によっては、命名が若干異なります。たとえば、EditText 要素には、<code>EditText.setText()</code> に対応する <code>text</code> 属性があります。 73 74 </p> 75 76<p class="note"><strong>ヒント:</strong> 異なるレイアウト タイプの詳細については、<a href="{@docRoot}guide/topics/ui/layout-objects.html">共通レイアウト オブジェクト</a>をご覧ください。 77また、<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a> のチュートリアル ガイドには、さまざまなレイアウトのビルドに関するチュートリアルがあります。 78</p> 79 80<h2 id="write">XML の記述</h2> 81 82<p>Android の XML ボキャブラリを使って、HTML でウェブページを作成するのと同じ方法で(ネストした一連の要素を使って)、UI レイアウトとそれに含まれる画面要素を素早く設計できます。 </p> 83 84<p>各レイアウト ファイルには、必ず 1 つのルート要素が含まれていて、そのルート要素は View または ViewGroup オブジェクトでなくてはなりません。ルート要素を定義すれば、追加のレイアウト オブジェクトやウィジェットを子の要素として追加して、レイアウトを定義するビュー階層を少しずつビルドできます。{@link android.widget.TextView} と {@link android.widget.Button} を保持するために、縦方向の {@link android.widget.LinearLayout} を使用する XML レイアウトの例を次に示します。 85</p> 86<pre> 87<?xml version="1.0" encoding="utf-8"?> 88<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 89 android:layout_width="match_parent" 90 android:layout_height="match_parent" 91 android:orientation="vertical" > 92 <TextView android:id="@+id/text" 93 android:layout_width="wrap_content" 94 android:layout_height="wrap_content" 95 android:text="Hello, I am a TextView" /> 96 <Button android:id="@+id/button" 97 android:layout_width="wrap_content" 98 android:layout_height="wrap_content" 99 android:text="Hello, I am a Button" /> 100</LinearLayout> 101</pre> 102 103<p>XML でレイアウトを宣言した後、そのファイルを Android プロジェクトの <code>res/layout/</code> ディレクトリ内で <code>.xml</code> 拡張子を付けて保存して、正しくコンパイルされるようにします。 104 </p> 105 106<p>レイアウト XML ファイルの構文の詳細については、「<a href="{@docRoot}guide/topics/resources/layout-resource.html">Layout Resources</a>」のドキュメントをご覧ください。</p> 107 108<h2 id="load">XML リソースの読み込み</h2> 109 110<p>アプリケーションをコンパイルすると、各 XML レイアウト ファイルは {@link android.view.View} リソースにコンパイルされます。 111{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} コールバックの実装で、アプリケーション コードからレイアウト リソースを読み込んでください。これを行うには、<code>{@link android.app.Activity#setContentView(int) setContentView()}</code> を呼び出し、<code>R.layout.<em>layout_file_name</em></code> の形式でレイアウト リソースへの参照を渡します。たとえば、XML レイアウトが <code>main_layout.xml</code> として保存される場合、次のようにしてアクティビティに読み込みます。 112 113 114 115 116 117</p> 118<pre> 119public void onCreate(Bundle savedInstanceState) { 120 super.onCreate(savedInstanceState); 121 setContentView(R.layout.main_layout); 122} 123</pre> 124 125<p>アクティビティの <code>onCreate()</code> コールバック メソッドは、アクティビティが起動されるときに、Android フレームワークによって呼び出されます(ライフサイクルに関する説明については、「<a href="{@docRoot}guide/components/activities.html#Lifecycle">アクティビティ</a>」のドキュメントをご覧ください)。 126 127 128</p> 129 130 131<h2 id="attributes">属性</h2> 132 133<p>すべての View と ViewGroup オブジェクトでは、独自のさまざまな XML 属性がサポートされています。一部の属性は、View オブジェクト特有のものですが(たとえば TextView では <code>textSize</code> 属性がサポートされています)、これらの属性はこのクラスを拡張可能な View オブジェクトによっても継承されます。一部は、ルート View クラスから継承されるため、すべての View オブジェクトに共通します(<code>id</code> 属性のような)。 134 135 136 137その他の属性は「レイアウト パラメータ」として考慮され、オブジェクトの親である ViewGroup オブジェクトとして定義された、View オブジェクトの特定のレイアウト方向を記述する属性となります。 138 139</p> 140 141<h3 id="id">ID</h3> 142 143<p>ツリー内で View を一意に識別するために、すべての View オブジェクトには、それに関連付けられた整数の ID があることがあります。アプリケーションがコンパイルされると、この ID は整数として参照されますが、一般的にその ID は <code>id</code> 属性で文字列としてレイアウト XML ファイルに割り当てられます。これは、すべての View オブジェクトに共通の XML 属性で({@link android.view.View} クラスで定義)、非常に頻繁に使用されます。XML タグ内の ID の構文を次に示します。 144 145 146 147 148</p> 149<pre>android:id="@+id/my_button"</pre> 150 151<p>文字列の先頭にあるアットマーク(@)は、その XML パーサーが ID の残りの文字列をパースして展開し、それを ID リソースとして識別する必要があることを示します。 152プラス記号(+)は、それが新しいリソース名で、作成してリソースに追加する(<code>R.java</code> ファイル内で)必要があることを意味しています。 153Android フレームワークによって提供されるその他のさまざまな ID リソースがあります。 154Android リソース ID を参照するときは、プラス記号を使う必要はありませんが、次のように <code>android</code> パッケージ名前空間を追加する必要があります。 155</p> 156<pre>android:id="@android:id/empty"</pre> 157<p><code>android</code> パッケージ名前空間付きの場合、ローカルのリソースクラスからではなく <code>android.R</code> リソースクラスから ID を参照するようになります。 158</p> 159 160<p>ビューを作成してアプリケーションからそれを参照するには、次のような共通のパターンがあります。</p> 161<ol> 162 <li>レイアウト ファイルでビューとウィジェットを定義して、一意の ID を割り当てる。 163<pre> 164<Button android:id="@+id/my_button" 165 android:layout_width="wrap_content" 166 android:layout_height="wrap_content" 167 android:text="@string/my_button_text"/> 168</pre> 169 </li> 170 <li>次に、View オブジェクトのインスタンスを作成し、それを次のようにレイアウトから取得する(通常は、<code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code> メソッド内で)。 171 172<pre> 173Button myButton = (Button) findViewById(R.id.my_button); 174</pre> 175 </li> 176</ol> 177<p>View オブジェクトの ID を定義することは、{@link android.widget.RelativeLayout} を作成するときに重要になります。相対レイアウトでは、兄弟ビューは一意の ID で参照される別の兄弟ビューに相対するレイアウトを定義できます。 178 179</p> 180<p>ツリー全体で ID が一意である必要はありませんが、探しているツリーの一部では、一意である必要があります。ほとんどの場合、それはツリー全体になりますが、可能な時に完全に一意になるようにすることが最善です。 181 182</p> 183 184 185<h3 id="layout-params">レイアウト パラメータ</h3> 186 187<p><code>layout_<em>something</em></code> という名前の XML レイアウト属性では、含まれている ViewGroup に適した View に対するレイアウト パラメータが定義されます。 188</p> 189 190<p>すべての ViewGroup クラスでは、{@link 191android.view.ViewGroup.LayoutParams} を拡張するネストされたクラスが実装されます。このサブクラスには、各子ビューのサイズと位置を ViewGroup に合うように定義するプロパティ タイプが含まれています。 192 193図 1 にあるように、親 ViewGroup によって、子 ViewGroup を含む、各子ビューのレイアウト パラメータが定義されます。 194</p> 195 196<img src="{@docRoot}images/layoutparams.png" alt="" /> 197<p class="img-caption"><strong>図 1.</strong> 各ビューに関連付けられたレイアウトのパラメータを含むビュー階層の視覚化。 198</p> 199 200<p>すべての LayoutParams サブクラスには、設定値に独自の構文があります。 201それぞれの子の要素では、その親に適した LayoutParams が定義される必要がありますが、自分の子に対して異なる LayoutParams を定義することもできます。 202 </p> 203 204<p>すべての ViewGroup には、幅と高さ(<code>layout_width</code> と <code>layout_height</code>)が含まれていて、各ビューでそれが定義されている必要があります。 205多くの LayoutParams には、省略可能なマージンと境界線も含まれています。 206 <p> 207 208<p>必要になる頻度は少ない可能性はありますが、幅と高さを正確なサイズで指定することもできます。 209ほとんどの場合は、次の定数のいずれかを使って幅や高さを設定します。 210 </p> 211 212<ul> 213 <li><var>wrap_content</var> では、ビューがそのコンテンツに必要な寸法に合わせられます。 214</li> 215 <li><var>match_parent</var> (API レベル 8 以前は <var>fill_parent</var> )では、ビューが親 ViewGroup で許容される最大サイズで表示されます。 216</li> 217</ul> 218 219<p>通常、ピクセルなどの絶対単位でレイアウトの幅と高さを指定することは推奨されません。 220 221密度非依存ピクセル単位(<var>dp</var>)、 <var>wrap_content</var>、 222<var>match_parent</var>などの相対測定を使う方が賢明です。そうすることで、さまざまな端末の画面サイズでアプリケーションが正しく表示されるようになります。使用可能な測定タイプは、「<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">使用可能なリソース</a>」のドキュメントで定義されています。 223 224 225 226</p> 227 228 229<h2 id="Position">レイアウトの位置</h2> 230 <p> 231 ビューの形状は、矩形です。ビューには、<em>左</em>と<em>上</em>の座標ペアで表される位置と、幅と高さで表される 2 次元があります。 232 233位置と寸法の単位はピクセルです。 234 235 </p> 236 237 <p> 238 {@link android.view.View#getLeft()} と {@link android.view.View#getTop()} メソッドを呼び出してビューの位置を取得できます。 239前者では、左またはビューを表す矩形の X 座標が返されます。 240後者では、上またはビューを表す矩形の Y 座標が返されます。 241これらのメソッドでは、両方とも親に相対するビューの位置が返されます。 242たとえば、<code>getLeft()</code> で 20 が返される場合、そのビューはその直属の親の左端から右に 20 ピクセルの位置にあることを意味します。 243 244 245 </p> 246 247 <p> 248 他にも、{@link android.view.View#getRight()} や {@link android.view.View#getBottom()} といった不要な計算を回避するさまざまな便利なメソッドが提供されています。 249 250 これらのメソッドでは、ビューを表す矩形の右端と下端の座標が返されます。 251たとえば、{@link android.view.View#getRight()} を呼び出すことは、<code>getLeft() + getWidth()</code> の計算と同様です。 252 253 </p> 254 255 256<h2 id="SizePaddingMargins">サイズ、パディング、マージン</h2> 257 <p> 258 ビューのサイズは、幅と高さで示します。実際に、ビューには幅と高さ 2 つの値がペアとして保持されています。 259 260 </p> 261 262 <p> 263 最初のペアは、<em>測定された幅</em>と<em>測定された高さ</em>と呼ばれます。 264これらの寸法で、その親内でのビューの大きさが定義されます。 265測定された寸法は、{@link android.view.View#getMeasuredWidth()} と {@link android.view.View#getMeasuredHeight()} を呼び出して取得できます。 266 267 268 </p> 269 270 <p> 271 2 番目のペアは、単に<em>幅</em>と<em>高さ</em>と呼ばれたり、<em>描画する幅</em>と<em>描画する高さ</em>と呼ばれたりします。 272これらの寸法は、描画時とレイアウト後に、画面上のビューの実サイズを定義するものです。 273 274これらの値は、測定された幅や高さと異なる値にすることもできますが、必須ではありません。 275幅と高さは、{@link android.view.View#getWidth()} と {@link android.view.View#getHeight()} を呼び出して取得できます。 276 277 </p> 278 279 <p> 280 その寸法を測るために、ビューではパディングも考慮されます。パディングは、ビューの上下左右に対し、ピクセルで記述されます。 281 282 パディングを使って、特定のピクセル値でビュー コンテンツのオフセットを指定できます。 283たとえば、左側のパディングが 2 の場合は、左端から 2 ピクセル右にビューのコンテンツが寄せられます。 284パディングは {@link android.view.View#setPadding(int, int, int, int)} メソッドを使って設定でき、{@link android.view.View#getPaddingLeft()}、{@link android.view.View#getPaddingTop()}、{@link android.view.View#getPaddingRight()}、{@link android.view.View#getPaddingBottom()} を呼び出してクエリできます。 285 286 287 288 </p> 289 290 <p> 291 ビューではパディングを定義できますが、マージンについてはサポートされていません。 292ただし、ViewGroup ではそのようなサポートが提供されています。詳細については、{@link android.view.ViewGroup} と {@link android.view.ViewGroup.MarginLayoutParams} をご覧ください。 293 294 295 </p> 296 297 <p>寸法の詳細については、<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">寸法の値</a>をご覧ください。 298 299 </p> 300 301 302 303 304 305 306<style type="text/css"> 307div.layout { 308 float:left; 309 width:200px; 310 margin:0 0 20px 20px; 311} 312div.layout.first { 313 margin-left:0; 314 clear:left; 315} 316</style> 317 318 319 320 321<h2 id="CommonLayouts">共通レイアウト</h2> 322 323<p>{@link android.view.ViewGroup} クラスの各サブクラスでは、ビュー内でネストするビューを表示する一意の方法が提供されます。 324Android プラットフォームにビルドされる共通のレイアウト タイプの一部を以下に示します。 325</p> 326 327<p class="note"><strong>注:</strong> 別のレイアウト内で 1 つ以上のレイアウトをネストして UI を設計できますが、レイアウトの階層はできる限り浅くしておくようにしてください。 328 329ネストが浅いレイアウトの場合、レイアウトの描画がより速くなります。深いビュー階層より、ワイドなビュー階層の方がより良いと言えます。 330</p> 331 332<!-- 333<h2 id="framelayout">FrameLayout</h2> 334<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout 335object. It's basically a blank space on your screen that you can 336later fill with a single object — for example, a picture that you'll swap in and out. 337All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot 338specify a different location for a child view. Subsequent child views will simply be drawn over 339previous ones, 340partially or totally obscuring them (unless the newer object is transparent). 341</p> 342--> 343 344 345<div class="layout first"> 346 <h4><a href="layout/linear.html">線形レイアウト</a></h4> 347 <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a> 348 <p>子を横方向または縦方向の 1 行にまとめるレイアウト。ウィンドウの長さが画面の長さを超える場合は、スクロールバーが作成されます。 349</p> 350</div> 351 352<div class="layout"> 353 <h4><a href="layout/relative.html">相対レイアウト</a></h4> 354 <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a> 355 <p>たとえば子 A を子 B の左になど、それぞれの子オブジェクトの位置を相対して指定したり、親の上に揃えてなど、親に相対して指定したりできます。 356</p> 357</div> 358 359<div class="layout"> 360 <h4><a href="{@docRoot}guide/webapps/webview.html">ウェブビュー</a></h4> 361 <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png" alt="" /></a> 362 <p>ウェブページを表示します。</p> 363</div> 364 365 366 367 368<h2 id="AdapterViews" style="clear:left">アダプタを使ったレイアウトをビルドする</h2> 369 370<p>レイアウトのコンテンツが動的または事前設定されていないとき、{@link android.widget.AdapterView} のサブクラスのレイアウトを使って、実行時にビューでレイアウトを設定できます。 371{@link android.widget.AdapterView} クラスのサブクラスでは、{@link android.widget.Adapter} を使ってそのレイアウトにデータがバインドされます。 372 373{@link android.widget.Adapter} はデータソースと {@link android.widget.AdapterView} レイアウト間の仲介として動作します。{@link android.widget.Adapter} によって、配列やデータベース クエリのようなソースからデータが取得され、各エントリが {@link android.widget.AdapterView} レイアウトに追加できるビューに変換されます。 374 375 376</p> 377 378<p>アダプタでサポートされている共通レイアウトには次が含まれます。</p> 379 380<div class="layout first"> 381 <h4><a href="layout/listview.html">リストビュー</a></h4> 382 <a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a> 383 <p>スクロール可能な 1 列のリストが表示されます。</p> 384</div> 385 386<div class="layout"> 387 <h4><a href="layout/gridview.html">グリッドビュー</a></h4> 388 <a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a> 389 <p>スクロール可能な列と行のグリッドが表示されます。</p> 390</div> 391 392 393 394<h3 id="FillingTheLayout" style="clear:left">データを使ったアダプタビューを書き込む</h3> 395 396<p>{@link android.widget.AdapterView} インスタンスを {@link android.widget.Adapter} にバインドして、{@link android.widget.ListView} や {@link android.widget.GridView} などの {@link android.widget.AdapterView} を入力できます。外部ソースのデータが取得され、各データエントリを表す {@link 397android.view.View} が作成されます。 398 399</p> 400 401<p>Android ではさまざまな種類のデータの取得と {@link android.widget.AdapterView} のビューのビルドに役立つ {@link android.widget.Adapter} のサブクラスがいくつか提供されます。 402最も一般的なアダプタは次の 2 つです。 403</p> 404 405<dl> 406 <dt>{@link android.widget.ArrayAdapter}</dt> 407 <dd>データソースが配列の場合に、このアダプタを使います。デフォルトでは、{@link 408android.widget.ArrayAdapter} によって各アイテムで {@link 409java.lang.Object#toString()} が呼び出され、そのコンテンツが {@link 410android.widget.TextView} に配置されることで、各配列アイテムのビューが作成されます。 411 <p>たとえば、{@link 412android.widget.ListView} に表示する文字列の配列がある場合、コンストラクタを使って新しい {@link android.widget.ArrayAdapter} を初期化して、各文字列と文字列配列のレイアウトを指定します。 413</p> 414<pre> 415ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 416 android.R.layout.simple_list_item_1, myStringArray); 417</pre> 418<p>このコンストラクタの引数を次に示します。</p> 419<ul> 420 <li>アプリの {@link android.content.Context}</li> 421 <li>配列の各文字列に対して {@link android.widget.TextView} を含むレイアウト</li> 422 <li>文字列配列</li> 423</ul> 424<p>次に、{@link android.widget.ListView} で {@link android.widget.ListView#setAdapter setAdapter()} を呼び出します。 425</p> 426<pre> 427ListView listView = (ListView) findViewById(R.id.listview); 428listView.setAdapter(adapter); 429</pre> 430 431 <p>各アイテムの概観をカスタマイズするには、自分の配列内のオブジェクトに {@link 432java.lang.Object#toString()} メソッドをオーバーライドします。または、たとえば各配列アイテムに {@link android.widget.ImageView} が必要な場合など、{@link android.widget.TextView} 以外の各アイテムの表示を作成するには、{@link 433android.widget.ArrayAdapter} クラスを拡張し、{@link android.widget.ArrayAdapter#getView 434getView()} をオーバーライドして、各アイテムに必要なビュータイプが返されるようにします。 435 436</p> 437 438</dd> 439 440 <dt>{@link android.widget.SimpleCursorAdapter}</dt> 441 <dd>{@link android.database.Cursor} から取得されたデータの場合は、このアダプタを使います。{@link android.widget.SimpleCursorAdapter} を使う場合は、{@link android.database.Cursor} で各行に使うレイアウトを指定して、{@link android.database.Cursor} のどの列をレイアウトのビューに挿入するのかを指定してください。 442 443 444たとえば、人の名前と電話番号のリストを作成する場合は、それぞれの人の行と、その名前と番号の列を含む {@link 445android.database.Cursor} を返すクエリを実行します。 446 447次に、それぞれの結果に対して {@link 448android.database.Cursor} のどの列をレイアウトに含めるかを指定する文字列配列と、各列が配置されるべき対応するビューを指定する整数配列を作成します。 449</p> 450<pre> 451String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, 452 ContactsContract.CommonDataKinds.Phone.NUMBER}; 453int[] toViews = {R.id.display_name, R.id.phone_number}; 454</pre> 455<p>{@link android.widget.SimpleCursorAdapter} のインスタンスを作成するとき、各結果に使うレイアウト、結果を含む {@link android.database.Cursor}、次の 2 つの配列を渡します。 456</p> 457<pre> 458SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 459 R.layout.person_name_and_number, cursor, fromColumns, toViews, 0); 460ListView listView = getListView(); 461listView.setAdapter(adapter); 462</pre> 463<p>次に、{@link android.widget.SimpleCursorAdapter} によって、対応する {@code toViews} ビューに各 {@code 464fromColumns} アイテムを挿入して提供されたレイアウトを使って {@link android.database.Cursor} で各行のビューが作成されます。 465</p>.</dd> 466</dl> 467 468 469<p>アプリケーションのライフサイクル中に、アダプタによって読み取られる基礎となるデータを変更する場合は、{@link android.widget.ArrayAdapter#notifyDataSetChanged()} を呼び出してください。 470これによって、データが変更されたアタッチされたビューが通知され、それ自体を更新する必要があることが通知されます。 471</p> 472 473 474 475<h3 id="HandlingUserSelections">クリック イベントを処理する</h3> 476 477<p>{@link android.widget.AdapterView.OnItemClickListener} インターフェースを実装して {@link android.widget.AdapterView} の各アイテムでのクリック イベントに応答できます。 478次に例を示します。</p> 479 480<pre> 481// Create a message handling object as an anonymous class. 482private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() { 483 public void onItemClick(AdapterView parent, View v, int position, long id) { 484 // Do something in response to the click 485 } 486}; 487 488listView.setOnItemClickListener(mMessageClickedHandler); 489</pre> 490 491 492 493