• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;?xml version="1.0" encoding="utf-8"?>
88&lt;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    &lt;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    &lt;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&lt;/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="&#64;+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="&#64;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&lt;Button android:id="&#64;+id/my_button"
165        android:layout_width="wrap_content"
166        android:layout_height="wrap_content"
167        android:text="&#64;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 &mdash; 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&lt;String> adapter = new ArrayAdapter&lt;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