AdapterView.OnItemSelectedListener 你真的懂了吗?


       AdapterView.OnItemSelectedListener 

       结构

       继承关系
       public static interface AdapterView.OnItemSelectedListener 

       类概述

       定义了当选中视图中的项目时调用的回调函数的接口。 

       公有方法

       public abstract void onItemSelected (AdapterView<?> parent, View view, int position, long id)   
       当选中视图中的项目时执行的回调函数。 实现时如果需要访问与选中条目关联的数据,可以调用 getItemAtPosition(position)。 

       参数

java代码:
  1. parent 发生选中事件的 AbsListView。 
  2. view AbsListView 中被选中的视图。 
  3. position 视图在一览中的位置(索引)。 
  4. id 被点击条目的行 ID。 
复制代码

        public abstract void onNothingSelected (AdapterView<?> parent) 
        当视图中的处于选中状态的条目全部消失时执行的回调函数。 启动触控功能或适配器为空都可能导致选中条目消失。 

        参数 
        parent  没有任何选中条目的 AdapterView。 

       AdapterView.OnItemClickListener 

        结构
        继承关系

        public static interface AdapterView.OnItemClickListener 

        子类及间接子类

        直接子类
        CharacterPickerDialog, PreferenceScreen 

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

        公共方法
        public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)  当 AdapterView 中一元素被点击时,回调方法被调用。

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

java代码:
  1. parent                        发生点击动作的 AdapterView。
  2. view                           在 AdapterView 中被点击的视图(它是由 adapter 提供的一个视图)。
  3. position                      视图在 adapter 中的位置。
  4. id                               被点击元素的行 id。

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开始的。




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



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

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

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

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





 

1、举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item。
如果你点了b这个item。如下:

public  void onItemClick (AdapterView<?> parent,    // parent相当于listview  Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X - -、
View view,     // view是你点b item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
int position,    // position是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
long id     // id是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅,看了之后心里才踏实

 

2、//这里的arg2指的是你点击的listview的项的id号,就是点的是哪一条,可以用switch(arg2)来设置,arg2的从0开始

 

 

3、AdapterView<?> arg0 参数得意思:官方解释说:the AdapterView where the click happened. 也就是当前点击的adapterview,这个参数是系统自动传入的,我们也不用调用,一般常用第二个和第三个参数。
然后给你讲AdapterView<?> ,这个属于java基础的内容,叫做泛型,就是告诉你传入的参数是哪种类型。 比如String<?>,List<T>,Map<K,V>,String<E>
?表示不确定的java类型。
 表示java类型。
K V 分别代表java键值中的Key Value。
E 代表Element。
ListView, GridView, Spinner and Gallery 中都要用到adapter,所以这里用问好表示不确定传入的是哪种类型,不用我们关系,系统自动传入。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值