一覧表示などはたいていはListViewを使います。まずは最も簡単なListActivityを使ってListViewに文字列を一覧表示する方法を解説。

サンプルをダウンロードしてください。

https://github.com/stack3/AndroidListViewSamples

サンプルを起動してSimpleListActivityを選択すると以下の様な画面が表示されます。

01

ListActivityを継承したActivityを作ります。

public class SimpleListActivity extends ListActivity {

Activityのlayout XMLは以下のようにListViewを含むようにします。

<?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="@android:id/list"
    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>

この時、ListViewのidは@android:id/listにしてください。これはSDKであらかじめ用意されたIDで、ListActivityはこのIDからListViewを検索します。
また、TextViewのidを@android:id/emptyにして配置すると、ListViewに表示する内容がないときは、そのTextViewが表示されます。

03

onCreateでこのXMLをレイアウトとして適用します。ここでは仮にcommon_list_activity.xmlとします。

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.common_list_activity);

次に一覧表示する文字列Item 0〜Item 99をListに格納します。

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

ListViewへ表示するためにはArrayAdapterを生成して、setListAdapterに渡す必要があります。

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
listView.setListAdapter(adapter);

ArrayAdapterの第1引数はContextつまりActivityそのもので構いません。

第2引数は一行のレイアウトリソースを渡します。今回はSDKであらかじめ用意された文字列を表示するだけのレイアウトandroid.R.layout.simple_list_item_1を使用します。

第3引数は表示する文字列の配列を渡します。

行をクリック(タップ)した時のイベントはListActivity#onListItemClickで受け取れます。

@Override
protected void onListItemClick(ListView listView, View view, int position, long id) {
    String item = (String)listView.getAdapter().getItem(position);
    Log.d(getClass().getName(), item);
}

positionがクリックした位置を示します。

その2へ続く