ホーム >  Android > ListView(イベント処理)

Android -ListView(イベント処理)-

ListViewのイベント処理

リストビューやスピナーは、項目が選択された場合イベントが発生します。

onItemClickメソッド リスト項目クリック時
onItemSelectedメソッド リスト項目が選択された時
(端末の十字キー等でリストの項目がフォーカスされた時)
onNothingSelectedメソッド リスト項目が何も選択されない時
(選択がなくなった時に呼ばれ、初期状態では、呼び出されません。)
onItemLongClickメソッド リストの項目が長押しされた時

ItemClickイベントの処理

  1. ListViewオブジェクトの取得します。
  2. AdapterView.OnItemClickListenerインターフェースを実装したオブジェクトイベントリスナとして登録します。
  3. onItemClickメソッドにクリックされた場合の処理を記述します。

ItemSelectedとNothingSelectedイベントの処理

  1. ListViewオブジェクトの取得します。
  2. AdapterView.OnItemSelectedListenerインターフェースを実装したオブジェクトイベントリスナとして登録します。
  3. onItemSelectedメソッドにリスト項目が選択された場合の処理を記述します。
  4. onNothingSelectedメソッドにリスト項目が何も選択されない場合の処理を記述します。

ItemLongClickイベントの処理

  1. ListViewオブジェクトの取得します。
  2. AdapterView.OnItemLongClickListenerインターフェースを実装したオブジェクトをイベントリスナとして登録します。
  3. onItemLongClickメソッドにリストの項目が長押しされた場合の処理を記述します。

ListActivityクラスを利用してListViewを表示する場合、ListActivityには、onListItemClickメソッドが用意されており、このメソッドを オーバーライドすることでリスト項目がクリックされた場合の処理を記述することができます。(サンプル9)

ListActivityでリスト選択時等の処理をしたい場合は、getListViewメソッドを利用してListActivity内部にあるListViewを取得して記述することが できます。(サンプル10)

ただし、ListViewオブジェクトにonItemClickイベントリスナーを設定すると、ListActivityのonItemClickメソッドはオーバーライドしても、呼び出されません。

ListViewクラスを利用してのイベント処理

サンプル8

  1. リスト項目「aaa」をクリック
  2. リスト項目「bbb」を方向キー等で選択
  3. リスト項目「bbb」の選択時に「ccc」をクリック
  4. リスト項目「ddd」を長押し

ListViewEx8

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

ListViewEx9

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

  1. リスト項目「aaa」をクリック
  2. リスト項目「bbb」を方向キー等で選択
  3. リスト項目「bbb」の選択時に「ccc」をクリック
  4. リスト項目「ddd」を長押し

ListViewEx10

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;
      }
    });
  }
}