Tips

Android ユーザーインターフェース応用 ウィジェット ListView 【Android Tips】

外部保存域

8-2
ユーザーインターフェース応用
ウィジェット ListView
この章ではAndroidのウィジェットであるListViewについて解説していきます。
ListView
ListViewは子要素をスクロール可能なリスト状に配置するためのレイアウトです。
 java.lang.Object
 →android.view.View
 →android.view.ViewGroup
 →android.widget.AdapterView
 →android.widget.AbsListView
 →android.widget.ListView

クラスの定義は上記のようになっており、ListViewクラスはViewGroupのサブクラスとなります。Adapterクラスを使用することにより、リスト状のアイテムが自動的にListViewに挿入される仕組みとなっています。Adapterは、配列やデータベースからのクエリ結果といったデータと、ListViewなどのViewのつなぎ役を果たすものです。下記コードで確認してみましょう。

レイアウトxmlファイル

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

</RelativeLayout>

javaファイル

package com.example.listview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

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

		String[] items = { "みかん", "りんご", "れもん" };

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

		ListView listView = (ListView) findViewById(R.id.listView1);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				String item = (String) parent.getItemAtPosition(position);
				Toast.makeText(MainActivity.this, item + "をクリックしました。", Toast.LENGTH_SHORT).show();
			}
		});
	}
}

それでは確認してみましょう。まずMainActivity(上記javaファイル)の19行目で配列を作成し、ListViewに表示させるアイテムを定義しています。この配列がListViewに表示するアイテムの元データとなります。

21行目ではArrayAdapterクラスのコンストラクタを用いてオブジェクトを作成し、19行目で作成した配列を格納しています。ArrayAdapterクラスは配列を元データとするAdapterを拡張したクラスです。似たようなクラスにはCursor(Cursorはデータベースから取得したデータを扱うためのクラス)を元データとするCursorAdapterクラスなどがあります。

ArrayAdapter()の各引数を以下に示します。

引数 概要
第1引数 Context context Contextオブジェクトを指定
第2引数 int textViewResourceId ListViewの各アイテムで使われるレイアウトXMLファイルのリソースIDを指定
第3引数 T[] objects ListViewに渡すデータを配列で指定



今回のサンプルでは第2引数に「android.R.layout.simple_list_item_1」を指定していますが、これはAndroidにもともと用意されている定義済みのレイアウトファイルのIDです。simple_list_item_1はTextViewが1つだけ定義されているレイアウトファイルです。

そして24行目でListViewにAdapterを設定しています。
これでAdapterは配列やCursorとListViewの橋渡しの役割を果たせるようになりました。

25行目ではリスナーを登録しています。
ここで使用しているリスナーはOnItemSelectedListenerで、ListViewの他にもSpinner等で使用します。OnItemSelectedListenerは、ListView内の項目が選択されたときに呼び出されるリスナーです。OnItemSelectedListenerのコールバックメソッドonItemSelected()の各引数を以下に示します。

  

引数 概要
第1引数 AdapterView parent イベントが発生したListView
第2引数 View view クリックされたリスト項目のViewオブジェクト
第3引数 int position クリックされたリスト項目のViewオブジェクトの位置
第4引数 long id クリックされたリスト項目のViewオブジェクトのID


29行目ではgetItemAtPosition()を使用して、クリックされた項目の元データとなっている配列の要素(ここでは”みかん”や”りんご”のこと)を取得しています。

以上がListViewの基本的な使用方法です。

 


Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search