第 3 章 ユーザーインターフェース 25
3.6 リストビュー
} });
private void setGreet() {
final RadioGroup time = (RadioGroup) findViewById(R.id.time);
final TextView result = (TextView) findViewById(R.id.result);
switch (time.getCheckedRadioButtonId()) { case R.id.morning:
result.setText("おはようございます。");
break;
case R.id.afternoon:
result.setText("こんにちは。");
break;
case R.id.night:
result.setText("こんばんは。");
break;
} } }
これで完成です。ラジオボタンで時間帯を選択して、ボタンをクリックしてみてください。選 択した時間帯に応じた挨拶が表示されるはずです。
3.6. リストビュー 37 というように、型としてPersonを渡します。ちなみに、
simple_list_item_1
というのは、リストの項目のために最初から定義されているレイアウトのひとつです。
次に、アダプターが持っているaddというメソッドを呼び出して、アダプターに項目を追加し
ます。Personクラスのインスタンスを項目とするアダプターの場合、
adapter.add(new Person("夏目なつみ"));
というように書くことによって、Personクラスのインスタンスを項目としてアダプターに追加 することができます。
そして、リストビューにアダプターを設定すれば、アダプターに追加された項目から構成さ れるリストが、リストビューによって表示されることになります。リストビューに対してアダプ ターを設定したいときは、リストビューが持っている、
void setAdapter(ListAdapter adapter) というメソッドを呼び出します。
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() + "円");
} }
3.7. スピナー 39