2011年4月15日金曜日

Android ListViewを一画面に複数配置する

以前のエントリでListViewは一画面に一つしか持てないようだと書いていたので訂正しておく。複数持てる。
ListActivityにて扱えるListView(idが@id/android:listのListView)は一つのみ(※)ってことをListViewは一画面に一つしか持てないと誤認していた。


※ListActivityではListViewが一つだけという意味ではなく別のidで振ってfindViewByIdしてやれば複数配置は可能。



一応、サンプル。特に難しいことはないが。
        ListView novelList = (ListView) findViewById(R.id.novel_list);
        BookAdapter novelAdapter = new BookAdapter(this, novels);
        novelList.setAdapter(novelAdapter);

        ListView comicList = (ListView) findViewById(R.id.comic_list);
        BookAdapter comicAdapter = new BookAdapter(this, comics);
        comicList.setAdapter(comicAdapter);
んでんでんで、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="fill_parent">
    <TextView android:text="小説" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="#333333"/>
    <ListView android:id="@+id/novel_list" android:layout_width="fill_parent"
        android:layout_height="220dip" />
    <TextView android:text="漫画" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="#333333"/>
    <ListView android:id="@+id/comic_list" android:layout_width="fill_parent"
        android:layout_height="220dip" />
</LinearLayout>
強いて言えばListViewの高さを適当な値にしているところに注意かな。
fill_parentやwrap_contentにしてしまうと、1つしか見えなくなったりするかも。