Android -ListView(イベント処理)-
ListViewのイベント処理
リストビューやスピナーは、項目が選択された場合イベントが発生します。
onItemClickメソッド | リスト項目クリック時 |
onItemSelectedメソッド | リスト項目が選択された時 (端末の十字キー等でリストの項目がフォーカスされた時) |
onNothingSelectedメソッド | リスト項目が何も選択されない時 (選択がなくなった時に呼ばれ、初期状態では、呼び出されません。) |
onItemLongClickメソッド | リストの項目が長押しされた時 |
ItemClickイベントの処理
- ListViewオブジェクトの取得します。
- AdapterView.OnItemClickListenerインターフェースを実装したオブジェクトイベントリスナとして登録します。
- onItemClickメソッドにクリックされた場合の処理を記述します。
ItemSelectedとNothingSelectedイベントの処理
- ListViewオブジェクトの取得します。
- AdapterView.OnItemSelectedListenerインターフェースを実装したオブジェクトイベントリスナとして登録します。
- onItemSelectedメソッドにリスト項目が選択された場合の処理を記述します。
- onNothingSelectedメソッドにリスト項目が何も選択されない場合の処理を記述します。
ItemLongClickイベントの処理
- ListViewオブジェクトの取得します。
- AdapterView.OnItemLongClickListenerインターフェースを実装したオブジェクトをイベントリスナとして登録します。
- onItemLongClickメソッドにリストの項目が長押しされた場合の処理を記述します。
ListActivityクラスを利用してListViewを表示する場合、ListActivityには、onListItemClickメソッドが用意されており、このメソッドを オーバーライドすることでリスト項目がクリックされた場合の処理を記述することができます。(サンプル9)
ListActivityでリスト選択時等の処理をしたい場合は、getListViewメソッドを利用してListActivity内部にあるListViewを取得して記述することが できます。(サンプル10)
ただし、ListViewオブジェクトにonItemClickイベントリスナーを設定すると、ListActivityのonItemClickメソッドはオーバーライドしても、呼び出されません。
ListViewクラスを利用してのイベント処理
サンプル8
- リスト項目「aaa」をクリック
- リスト項目「bbb」を方向キー等で選択
- リスト項目「bbb」の選択時に「ccc」をクリック
- リスト項目「ddd」を長押し
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
res/layout/list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:height="50dp"
android:textColor="#0000ff"
android:textSize="24sp" >
</TextView>
ListViewEx8.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListViewEx8 extends Activity {
private String [] items={"aaa","bbb","ccc","ddd"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView=(ListView)findViewById(R.id.list_view);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.list_row,items);
listView.setAdapter(adapter);
//リスト項目をクリック時に呼び出されるコールバックを登録
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//リスト項目クリック時の処理
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx8.this, "Click: "+item, Toast.LENGTH_SHORT).show();
}
});
//リスト項目の選択時に呼び出されるコールバックを登録
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//リスト項目が選択された場合(端末の十字キー等でリストの項目がフォーカスされた時)の処理
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx8.this, "Selected: "+item, Toast.LENGTH_SHORT).show();
}
//リスト項目が何も選択されない場合の処理
//(初期状態では、呼び出されず、選択がなくなった時に呼ばれる)
@Override
public void onNothingSelected(AdapterView<?> adapterview) {
// ここに処理を記述します。
//今回は、トースト表示
Toast.makeText(ListViewEx8.this, "no item", Toast.LENGTH_SHORT).show();
}
});
//リストの項目が長押しされた場合に呼び出されるコールバックを登録
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
//リストの項目が長押しされた場合の処理
@Override
public boolean onItemLongClick(AdapterView<?> parent,View view, int position, long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx8.this, "Long: "+item, Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
ListActivityクラスを利用してのイベント処理(1)
ListActivityクラスを利用してListViewを表示する場合、ListActivityには、onListItemClickメソッドが用意されており、このメソッドをオーバーライドすることでリスト項目がクリックされた場合の処理を記述することができます。
ListActivityでリスト選択時等の処理をしたい場合は、getListViewメソッドを利用してListActivity内部にあるListViewを取得して記述することができます。(サンプル10)
サンプル9
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
res/layout/list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:height="50dp"
android:textColor="#0000ff"
android:textSize="24sp" >
</TextView>
ListViewEx9.java
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListViewEx9 extends ListActivity {
private String[] items = { "aaa", "bbb", "ccc", "ddd" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_row, items);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView listview, View view, int position,long id) {
// ここに処理を記述します。
// 今回は、トースト表示
String item = (String) listview.getItemAtPosition(position);
Toast.makeText(ListViewEx9.this, "Click: " + item, Toast.LENGTH_SHORT).show();
}
}
ListActivityクラスを利用してのイベント処理(2)
ListActivityでリスト選択時等の処理をしたい場合は、getListViewメソッドを利用してListActivity内部にあるListViewを取得して記述することが できます。
ただし、ListViewオブジェクトにonItemClickイベントリスナーを設定すると、ListActivityのonItemClickメソッドはオーバーライドしても、呼び出されません。
サンプル10
- リスト項目「aaa」をクリック
- リスト項目「bbb」を方向キー等で選択
- リスト項目「bbb」の選択時に「ccc」をクリック
- リスト項目「ddd」を長押し
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
res/layout/list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:height="50dp"
android:textColor="#0000ff"
android:textSize="24sp" >
</TextView>
ListViewEx10.java
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListViewEx10 extends ListActivity {
private String[] items = { "aaa", "bbb", "ccc", "ddd" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_row, items);
setListAdapter(adapter);
// ListActivity内部にあるListViewオブジェクトを取得する場合
ListView listView=getListView();
//リスト項目をクリック時に呼び出されるコールバックを登録
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//リスト項目クリック時の処理
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx10.this, "Click: "+item, Toast.LENGTH_SHORT).show();
}
});
//リスト項目の選択時に呼び出されるコールバックを登録
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//リスト項目が選択された場合(端末の方向キー等でリストの項目がフォーカスされた時)の処理
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx10.this, "Selected: "+item, Toast.LENGTH_SHORT).show();
}
//リスト項目が何も選択されないない場合の処理
//(初期状態では、呼び出されず。選択がなくなった時)
@Override
public void onNothingSelected(AdapterView<?> adapterview) {
// ここに処理を記述します。
//今回は、トースト表示
Toast.makeText(ListViewEx10.this, "no item", Toast.LENGTH_SHORT).show();
}
});
//リストの項目が長押しされた場合に呼び出されるコールバックを登録
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
//リストの項目が長押しされた場合の処理
@Override
public boolean onItemLongClick(AdapterView<?> parent,View view, int position, long id) {
// ここに処理を記述します。
//今回は、トースト表示
ListView listView =(ListView)parent;
String item=(String)listView.getItemAtPosition(position);
Toast.makeText(ListViewEx10.this, "Long: "+item, Toast.LENGTH_SHORT).show();
return false;
}
});
}
}