前回の続き。今回はListActivityを使わずListViewを表示する方法です。表示する内容は前回同様、テキストを一覧表示するだけです。

※ 基本を理解するためには、至極簡単なサンプルが良いと思います。

サンプルコード: https://github.com/stack3/AndroidListViewSamples

SimpleListViewを選択すると以下の画面が表示されます。

01

前回と同じなんですが・・・

common_list_view_activity.xml

activityのLayout XMLです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
  </ListView>
  <TextView
    android:id="@android:id/empty"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="@dimen/normal_padding"
    android:textSize="@dimen/large_text_size"
    android:text="@string/empty" />
</LinearLayout>

ListActivityを使わない場合も、idが@android:id/emptyのViewがあれば、ListViewが空の時にそれを表示してくれます。

SimpleListViewActivity

今回はListActivityではなくActivityを継承します。

public class SimpleListViewActivity extends Activity {

SimpleListViewActivity#onCreated

まずはお約束どおりcommon_list_view_activityを適用。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.common_list_view_activity);

表示する文字列のList作成。これも前回と同じ。

ArrayList items = new ArrayList();
for (int i = 0; i < 100; i++) {
  items.add(String.format("Item %d", i));
}

ArrayAdapterの作成とListViewへのAdapter設定。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
ListView listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(adapter);

今回はListViewをfindViewByIdで取得する必要があります。そしてListView#setAdapterでAdapterを設定します。

行をクリックした時のイベントは、ListView#setOnItemClickListenerに設定したListener経由で受け取ります。

listView.setOnItemClickListener(onItemClickListener);
private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String item = (String)parent.getAdapter().getItem(position);
        Log.d(getClass().getName(), item);
    }
};  

ListActivityを使う場合と比べて、ほとんど手間は変わりません。よって次回からはListViewを直接使う方法で色々と説明して行きたいと思います。
※ 自分自身あまりListActivityを使いません。

その3へ続く