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的区别:

position The position of the view in the adapter.
id The 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,Map,String
?表示不确定的java类型。
T  表示java类型。
K V 分别代表java键值中的Key Value。
E 代表Element。
ListView, GridView, Spinner and Gallery 中都要用到adapter,所以这里用问好表示不确定传入的是哪种类型,不用我们关系,系统自动传入。



你可能感兴趣的:(安卓开发实战随笔)