ラベル Adapter の投稿を表示しています。 すべての投稿を表示
ラベル Adapter の投稿を表示しています。 すべての投稿を表示

2011/07/04

ListViewやSpinnerを使ってみる2

ListViewに引き続き、Spinnerにデータを渡すAdapterの記事です。
ListView同様SpinnerでもSimpleAdapterとArrayAdapterが利用できます。
ただSpinnerで利用する際には

setDropDownViewResource

を呼ぶ必要があります。


Spinnerは画面に選択された値が出ている時と、それをクリックしてダイアログが飛び出てくる時(ドロップダウン時)と、2種類のViewを持っているためsetDropDownViewResourceを指定して飛び出してきた際のViewを指定しましょう。
まぁ別に、「画面にいるときも飛び出してきたときも同じViewで問題無い」って場合は呼ぶ必要無いんですが。。。

ただしArrayAdapterやSimpleAdapterを利用する場合、通常のViewとドロップダウン時のビューで指定するレイアウト上のID(≠レイアウトxmlのID)を同一にする必要がある様です。


今回はArrayAdapterの場合のみ。
レイアウトxmlはAndroidに標準で用意された物を利用します。



ListViewとの違いはドロップダウン時のViewを指定することと、選択時のリスナー名が違うことくらいです。


次はListViewの内容を更にカスタマイズ。

ListViewやSpinnerを使ってみる1

今回はListViewやSpinnerに表示する項目にデータを渡すAdapterに関する記事です。

AndroidでListViewやSpinnerを利用するには標準でSimpleAdapterやArrayAdapter(他にもCursorAdapter等)が用意されています。そしてこれらAdapterはBaseAdapterというものを継承して作成されています。

とりあえずはSimpleAdapterとArrayAdapterについて簡単に解説します。

まずSimpleAdapterとArrayAdapterについて違う部分を先に説明すると、前者は渡すデータがMap<String, ?>で後者がStringやCharSequenceになります。また前者は渡した後のデータをAdapter内で変更することが出来ませんが、後者は足したり引いたりソートしたり出来ます。



まずはSimpleAdapterについて
SimpleAdapterのコンストラクターでは
  • 内包するMapデータ
  • ListViewで表示するレイアウトxml
  • Mapデータのキーと対応するレイアウトのID
を渡す必要があります。

表示できる内容はTextView、CheckedTextView、ImageView、CheckBox?
ImageViewに表示できる内容はリソースIDを渡せる画像のみです。
私自身はこの記事を書いている時点でアプリにSimpleAdapterを利用したことがありません。

そんな私が作ったSimpleAdapterのサンプルコードです。
レイアウトXML(simpleadapter_layout1.xml)





次にArrayAdapterの簡単な使い方です。
ArrayAdapterでは基本的に1つのTextView(CheckedTextView)だけを表示することが出来ます。
コンストラクターは
  • 内包するテキストデータ
  • ListViewで表示するレイアウトxml
  • レイアウトxml上のTextViewのID
を渡す必要があります。
私自身はこの記事を書いている時点でアプリにArrayAdapterを利用したことがありません。

レイアウトxml(arrayadapter_layout1.xml)





おまけ
SimpleAdapterで内容を動的に変えてみる場合。
Adapterと同期するData(SimpleAdapterの場合はList<Map>)を別に管理することで、中身の追加・削除が容易に行えます。

(レイアウトxmlは上のSimpleAdapter例と同じ)



ListViewは覚えてしまえば非常に簡単で使いやすいと思います。
次回は適度にSpinnerについて。