ListView中AdapterView.OnItemClickListener

来源:互联网 发布:淘宝女鞋店 知乎 编辑:程序博客网 时间:2024/05/22 10:47

一、概述

    这个接口定义了当AdapterView中一元素被点击时,一个回调函数被调用。

 二、公共方法

  public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

         AdapterView中一元素被点击时,回调方法被调用。

  如果需要访问与被选项相关的数据,执行程序可以调用getItemAtPosition(position)

  参数

                      parent     发生点击动作的AdapterView

         view        AdapterView中被点击的视图(它是由adapter提供的一个视图)

                 position 视图在adapter中的位置。

       id            被点击元素的行id


postion与id的区别:

positionThe position of the view in the adapter.idThe row id of the item that was clicked.一般情况下,两者的值大小是一样的,但当在ListView添加headerView或者footerView之后,两个值就出现了差别。

例如:对于ListView  mHomeListView

[java] view plaincopy
  1.    TextView textView = new TextView(this);  
  2. textView.setText("headerView");  
  3. mHomeListView.addHeaderView(textView);  

给mHomeListView 添加headerView 后,界面显示:



当点击 headerView行时:id=-1, position =0;

当点击 Stand行时:id=0,position=1;

当点击 Far Awa...行时:id=1,position=2;

至此,发现的规律:position是view在 adapterView中的位置,id是被点击元素在总数据adapter行id。



关于onItemClick方法,下面详细说说。(以下是官方的说明,参数命名不同而已,类型都是一样的。arg0=parent,arg1=view,arg2=position,arg3=id)

public abstract void onItemClick(AdapterView<?> parent,View view, int position, long id)

Since: API Level 1

Callback method to be invoked when an item in this AdapterView has been clicked.

Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.

//当点击listview某一项时,这个回调方法就会被调用。

Parameters
parentThe AdapterView where the click happened.viewThe view within the AdapterView that was clicked (this will be a view provided by the adapter)positionThe position of the view in the adapter.idThe row id of the item that was clicked.


主要说说最后三个参数,

view——————是你点击的Listview的某一项的内容,来源于adapter。如用((TextView)arg1).getText(),可以取出点击的这一项的内容,转为string类型。

position————是adapter的某一项,如点击了listview第2项,而第2项对应的是adapter的第2个数值,那此时position的值就为1了。

                             如对应adapter的第3个数值,那此时position的值就为2了。

id———————id的值为点击了Listview的哪一项对应的数值,点击了listview第2项,那id就等于1。

注:这些数值都是从0开始的。

[java] view plaincopy
  1. /*author:conowen 
  2.  * date:2012.2.26 
  3.  */  
  4. package com.conowen.listview;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.widget.AdapterView;  
  10. import android.widget.AdapterView.OnItemClickListener;  
  11. import android.widget.AdapterView.OnItemLongClickListener;  
  12. import android.widget.ArrayAdapter;  
  13. import android.widget.ListView;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17. public class ListviewActivity extends Activity {  
  18.     /** Called when the activity is first created. */  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         ListView lv = (ListView) findViewById(R.id.lv);  
  24.         String[] data = { "windows""linux""ios""android""wp7",  
  25.                 "Symbian" };// 定义adapter  
  26.         lv.setAdapter(new ArrayAdapter<String>(this,// 把adapter绑定到listview里面  
  27.                 android.R.layout.simple_expandable_list_item_1, data));  
  28.         // 点击事件  
  29.         lv.setOnItemClickListener(new OnItemClickListener() {  
  30.   
  31.             @Override  
  32.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  33.                     long arg3) {  
  34.                 // TODO Auto-generated method stub  
  35.                 Toast.makeText(ListviewActivity.this"你点击的是第" + arg3 + "项",  
  36.                         Toast.LENGTH_SHORT).show();  
  37.                 // 取出所点击的那一项的id  
  38.   
  39.             }  
  40.   
  41.         });  
  42.         // 长按事件  
  43.         lv.setOnItemLongClickListener(new OnItemLongClickListener() {  
  44.   
  45.             @Override  
  46.             public boolean onItemLongClick(AdapterView<?> arg0, View arg1,  
  47.                     int arg2, long arg3) {  
  48.                 // TODO Auto-generated method stub  
  49.                 Toast.makeText(ListviewActivity.this,  
  50.                         ((TextView) arg1).getText(), Toast.LENGTH_LONG).show();  
  51.                 // 取出点击listview某一项的内容  
  52.                 return false;  
  53.             }  
  54.   
  55.         });  
  56.     }  
  57. }  

0 0