第 3 章 ユーザーインターフェース 24
3.6 リストビュー
}
これで完成です。ラジオボタンで時間帯を選択して、ボタンをクリックしてみてください。選 択した時間帯に応じた挨拶が表示されるはずです。
3.6. リストビュー 37
3.6.3 リストビューのイベントリスナー
リストビューに対してイベントリスナーを設定しておくことによって、リストビューによって 表示されているリストの項目がクリックされたときに何らかの動作を実行する、ということがで きます。
リストの項目がクリックされたときに何らかの動作を実行するイベントリスナーは、
android.widget.AdapterView.OnItemClickListener
というインターフェースを実装したクラスのインスタンスです。そして、このインターフェース を実装するために定義する必要があるのは、
void onItemClick(AdapterView<?> parent, View view, int position, long id)
というメソッドです。
3.6.4 クリックされた項目の取得
ところで、onItemClickの中で、クリックされた項目を取得したいときは、どうすればいい のでしょうか。
onItemClickは4個の引数を受け取るわけですが、クリックされた項目は、それらの引数のう
ちの1個目と3個目を使うことによって取得することができます。1個目の引数は、イベントを 発生させたリストビューで、2個目の引数は、クリックされた項目の番号です(番号は、追加し た順番のとおりに、0、1、2、… … と与えられます)。
クリックされた項目を取得したいときは、まず、リストビューが持っている、
ListAdapter getAdapter()
というメソッドを呼び出すことによって、そのリストビューに設定されているアダプターを取得 します。そして次に、アダプターが持っている、
Object getItem(int position)
というメソッドを呼び出して、クリックされた項目の番号を引数として渡すことによって、ク リックされた項目を取得します。
3.6.5 リストビューを使ったアプリケーションの例
それでは、リストビューを使ったアプリケーションを作ってみましょう。
まず最初に、次のようなプロジェクトを作成してください。
Project name listview Application name リストビュー
Package name org.example.listview Create Activity ListViewActivity
次に、main.xmlを次のように書き換えてください。
レイアウトXMLの例 main.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"
>
<ListView android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/selecteditem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
次に、ListViewActivity.javaを次のように書き換えてください。
プログラムの例 ListViewActivity.java package org.example.listview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView;
import android.widget.TextView;
public class ListViewActivity extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<Dish> adapter = new ArrayAdapter<Dish>(this,
android.R.layout.simple_list_item_1);
adapter.add(new Dish("焼きそば", 480));
adapter.add(new Dish("カツ丼", 540));
adapter.add(new Dish("カレーうどん", 460));
adapter.add(new Dish("オムライス", 520));
final ListView listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(adapter);
listview.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { setSelectedItem(parent, position);
} });
}
private void setSelectedItem(AdapterView<?> parent, int position) { Dish dish = (Dish) parent.getAdapter().getItem(position);
final TextView selecteditem =
(TextView) findViewById(R.id.selecteditem);
selecteditem.setText(
"オーダー = " + dish.getName() + "\n" +
"金額 = " + dish.getPrice() + "円");
} }
class Dish { String name;
int price;
Dish(String aname, int aprice) { name = aname;
price = aprice;
}
public String toString() {
return name + "(" + price + "円)";
}
public String getName() { return name;
}
public int getPrice() { return price;
} }
これで完成です。実行すると、リストビューによってリストが表示されるはずですので、項目 のどれかをクリックしてみてください。そうすると、クリックされた項目についてのメッセージ
3.7. スピナー 39