ListViewをカスタマイズする

By daichi1128
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

今回はTwitter風の画面を作成してみます。

Androidでデータを一覧で表示したい場合、ListViewを使う方法があります。
ListViewはこのように表示されます。

listview

ですが、今回のようにTwitter風に表示したい場合は、表示部分をカスタマイズしなければなりません。

そこで今回はListViewのカスタマイズ方法のご紹介です。
こんな画面にカスタマイズしてみます。

twitter

ListActivityの使い方

リストを表示する画面を作りたい場合、ListActivityを使うと便利です。

ListActivityでは、表示したいデータとビューをマッピングするために、ListAdapterを使います。
単純に文字列だけのリストを表示したい場合はこんなコードで作れます。

シンプルですね。

ArrayAdapterは渡されたデータ(items)をTextViewのtextにセットして、Activityに返し、Acitivityが渡されたビューを表示する、という処理を内部でしています。
その処理を行うのはArrayAdapter#getViewメソッドです。なので、この処理をオーバーライドしてあげれば、自分の好きなビューを表示できるようになります。

というわけで、ArrayAdapterを継承して、Twitter風にデータとビューをマッピングさせるTwitterAdapterクラスを作成します。

TwitterAdapterクラスの作成

TwitterAdapterクラスの作成の前に、twitterデータを表すTwitterStatusクラスを作成しましょう。
Twitterクラスは名前とつぶやきを保持するシンプルなクラスです。

次にTwitterAdapterクラスを作成します。

twitterAdapterクラスはプライベートなフィールドとして、ArrayListとLayoutInflaterを持っています。
ArrayListはgetViewメソッドの中で該当するデータを取得するために、コンストラクタ内でセットしています。
LayoutInflaterはxmlのレイアウトファイルからビューを生成してくれるクラスで、こちらもgetViewメソッド内で使います。
LayoutInflaterはContextから取得できるので、コンストラクタ内でセットしています。

カスタマイズ用レイアウト定義ファイルの作成

layoutを定義したtwitter_row.xmlは以下です。res/layoutフォルダ内に配置しておきます。

上記の定義で行の左側に画像、右側2段にテキストを表示するレイアウトを設定しています。
# ここではアイコンファイルは固定で指定しています。やっつけではありません。

定義ファイルの定義の仕方は、res/layout/main.xmlの場合と同様なので、ここでは多くは語りません。

カラー定義

上のtwitter_row.xmlではテキストの色を別に定義された値から読み込んでいます。
やっつけですが、string.xml内に以下のように追加しました。

行の背景

背景には画像を使用しています。以下の画像をback.pngとしてres/drawable-hdpi, res/drawable-ldpi, res/drawable-mdpiに放り込んでおきます。

back.png

back.png

アイコン画像

上の定義では、アイコン画像はres/drawable/twitter_logo_techfirm01_bigger.pngを読んでいるので、自分で表示したいファイルに置き換えてください。

ListActivityの作成

ここまでくればカスタマイズは終わったも同然です。以下のようにListActivity(ここではMainAcitityクラスとしています)を変更します。

実際にはtwitter APIを叩いてレスポンスを受け取り、データをパースしてArrayListを生成する処理が必要ですが、今回はListViewのカスタマイズがメインなので、createDummyDataで代用しています。

ListViewのカスタマイズは以上です。
お疲れ様でした。

参考

関連する投稿