2012年04月26日

onItemClickの引数


前回、リストビューのイベント取得において
setOnItemClickListenersetOnItemSelectedListeneを使用しました

ListViewのクリック
指定したリストビューのitemを取得するのにonItemClickが使用されています
今回はこのonItemClickをもう少し詳しく見ていきたいと思います

onItemClick(AdapterView parent, View view,int position, long id)
parent:クリックされたAdapterのビューとなる
view:実際にクリックされたビュー
position:アダプターの何番目がクリックされたか
id:クリックされた列のid

前回のプログラムを以下のように変更して何が取得されているのかを詳しく見たいと思います
MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends Activity {

    private String[] mStrings ={ "test1", "test2", "test3", "test4" };
    
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //リストビューを作成 
        ListView lv = new ListView(this);
        setContentView(lv);

        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, mStrings);
        lv.setAdapter(adapter);
 
        //クリックイベントを検出
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                //ListView listView = (ListView) parent;
                //クリックされたものを取得
                String get_parent = (String) parent.getClass().getSimpleName();
                String get_position = String.valueOf(position);
                String get_id = String.valueOf(id);
                //Log出力
                Log.v("tag", String.format("onItemClick: %s", get_parent));
                Log.v("tag", String.format("onItemClick: %s", get_position));
                Log.v("tag", String.format("onItemClick: %s", get_id));
            }
        });
        
        //セレクトされたときに実行される
        lv.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                //ListView listView = (ListView) parent;
                //クリックされたものを取得
                String get_parent = (String) parent.getClass().getSimpleName();
                String get_position = String.valueOf(position);
                String get_id = String.valueOf(id);
                //Log出力
                Log.v("tag", String.format("onItemClick: %s", get_parent));
                Log.v("tag", String.format("onItemClick: %s", get_position));
                Log.v("tag", String.format("onItemClick: %s", get_id));
            }
            //何も選択さてないときに実行
            public void onNothingSelected(AdapterView parent) {
                Log.v("tag", "onNothingSelected");
            }
        });
    }
}

ためしにtest1をクリックしてみると・・・
device97.png
parentはListViewが、positionは0が(1番目-1)、idも0が(1番目-1)が
それぞれLogとして出力されます

同様に下ボタンでtest1をセレクトすると
device95.png

device98.png
こちらも同様にparentはListViewが、positionは0が(1番目-1)、idも0が(1番目-1)が
Logとして出力されます

スポンサードリンク

ListViewのクリック


前回までにリストビューの基本的な表示を行いました
ListActivityを利用したリスト表示
今回は表示したリストビューをタッチした時のイベントを検出したいと思います
リストビューの選択を検出するには
OnItemClickListenerを使用します
これは指定したitemがクリックされたときに実行されるものでこれを
作成したリストビューに適用すれば、リストビューがクリックされた時に実行されます
また十字キーなどにより選択(セレクト)された時には
setOnItemSelectedListenerを使用します
今回はクリックやセレクトされたときにLogを出力するプログラムを作成してみます
MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends Activity {

    private String[] mStrings ={ "test1", "test2", "test3", "test4" };
    
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //リストビューを作成 
        ListView lv = new ListView(this);
        setContentView(lv);

        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, mStrings);
        lv.setAdapter(adapter);
 
        //クリックイベントを検出
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                ListView listView = (ListView) parent;
                //クリックされたものを取得
                String item = (String) listView.getItemAtPosition(position);
                //Log出力
                Log.v("tag", String.format("onItemClick: %s", item));
            }
        });
        
        //セレクトされたときに実行される
        lv.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                ListView listView = (ListView) parent;
                //クリックされたものを取得
                String item = (String) listView.getSelectedItem();
                Log.v("tag", String.format("onItemSelected: %s", item));
            }
            //何も選択さてないときに実行
            public void onNothingSelected(AdapterView parent) {
                Log.v("tag", "onNothingSelected");
            }
        });
    }
}
初期画面は以前と変わりません
device92.png
ためしにtest1をクリックしてみると・・・
device94.png
Log“onItemClick:test1”が出力されます

次に下キーでtest1をセレクトするとします
device95.png
すると・・・
device96.png
Log“onItemSelicted:test1”が出力されます

スポンサードリンク

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。