2011年3月30日水曜日

Android 複数のリストを表示する

ListViewは一画面に一つしか持てないようなので、複数のListを表示する方法を考える。複数のリストという言い方があってるかわからないが、やりたいことは各リストに見出し付きで1画面に表示させたい。Y!ニュースの各トピックのニュースが一画面に出ているイメージ。

※追記
ごめんなさい!吹けません!ってことで、嘘ついてたので訂正とお詫びをしておく。
ListViewは一画面に複数持てました。間違ったこと書いてすみません。
Android ListViewを一画面に複数配置する


なんか良い方法も浮かばず見つからず、inflateとaddViewを繰り返すことにした。
        LinearLayout main = (LinearLayout) findViewById(R.id.main);
        for (int i = 0; i < 3; i++) {
            LinearLayout header = (LinearLayout) View.inflate(this, R.layout.header, null);
            TextView headerText = (TextView) header.findViewById(R.id.header);
            headerText.setText("見出し" + i);
            for (int j = 0; j < i + 1; j++) {
                TextView row = (TextView) View.inflate(this, R.layout.row, null);
                row.setText("項目" + j);
                header.addView(row);
            }
            main.addView(header);
        }
サンプルのためforでやってるが実用だとここら辺にビジネスロジックが入ると思うが、とりあえずこんな感じで。

header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/header" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:padding="5dip"
        android:textSize="18sp" android:background="#ff333333" />
</LinearLayout>
row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:padding="10dip" />
このサンプルではrow.xmlはTextViewだけだが、ここはViewじゃなくてLayoutにして、いろいろなViewを配置すればいいじゃん。


見てくれはまだまだ悪いけど、それっぽい表示にはなったので今日はこれで良しとする。

※追記
ListView positionによってViewを変えることで同様のことができる。
本記事の方法は決して良い方法ではないかもしれないので中尉。