这两天事情比较多,所以没有来得及更新博客,对不起大家哈。
今天我们来讲一下Spinner的用法:
很多同学不知道Spinner是什么,没有用过,Spinner是一个下拉菜单,大家都用过QQ吧,QQ在账号输入的地方有一个向下的小三角,点击以后会出现一个下拉菜单,这个作用就跟Spinner很类似。
首先我们在xml中写一个Spinner的标签。
这是最基础的三个属性,现在他还是没有数据源的,我们run了以后里面也是白白的,所以现在来添加一下数据:
添加数据的方法有两种,一种是在.XML文件中添加,另一种是在java代码中添加,第一种方法一行代码就可以搞定,第二种相对第一种比较麻烦一些,那为什么还要有第二种呢?我们先吧这两种方法写出来,之后在对比一下区别。
方法1:在.xml文件中添加。
首先我们找到res下的values文件夹,在里面创建一个叫做entries(只是这样方便查找,你想起asd也可以),
在里面写一个string-array的标签,并在里面写一些数据。
为了你们理解,我把名字起成了asd。然后在Spinner中写entries属性,里面写的是string-array的name的值。然后我们来看一下效果:
我们看到了,点击他以后,会出现一个下拉菜单,里面就是我们之前写的属性。是不是很简单,下面我们来看一下第二种写法。
方法2:用java代码实现:
首先我们在java中创建一个spinner对象。并且指定id(这些都是之前的知识,就不多说了。)
然后添加数据需要调用一个setAdapter方法,这个方法接收一个类型为SpinnerAdapter的参数。SimpleAdapter是Adapter(适配器)的一个子类。适配器又是什么呢,适配器是指把我们界面和数据连接显示的一个东西,我们要通过这个适配器,来吧数据显示在Spinner中。
然后我们需要创建一个SimpleAdapter,
我们发现他的构造方法里面有5个参数,我们一个一个来看一下:
context就不谈了,上下文。
data 接收一个数据类型为List嵌套Map的集合。这个数据和最后两个数据我们等会儿会详细讲一下。
resource 是传入我们的布局,我们的数据将显示在什么样的布局上,可以是android内置的,也可以是我们自己创建的。
from和to:
在data数据类型中,我们可以看到他里面嵌套的Map的key值是String类型,value是任意类型。Map中value放入的是我们控件显示的数据值(比如我们的图片,或者是一些文字)。而有一个控件、就会有一个控件的Id、就会有一个Map、那么from数组中就会存放一个值,这个值就是Map的key值。而to数组存放的就是我们控件的Id。下面我们来演示一下。
我们选择用自定义layout。首先我们在layout下创建一个layout名为list(名字随便起),在里面创建两个控件并且指定Id,上图自己看。
我们需要一个List,所以我们来创建一个List,
我们创建了ArrayList之后,有顺便创建添加了数据。因为在list中有两个控件,所以每次必须有两个Map之传入,第一个是我们imageview的数据,key值命名为pic,第二个是TextView的值为了简单就随便的了,key值命名为text。
现在我们可以创建SimpleAdapter了:
现在来看这个构造器应该比较轻松了吧,第一个参数不说了。第二个我们传入刚刚创建的List。第三个是我们刚刚创建的布局。第四个我们新建了一个String数组,里面放入了我们的Map的两个key值。第五个参数我们新建了一个int数组,在里面放入了我们list的两个控件的id(注意string数组和int数组的值要一一对应)。
最后一步,添加adapter。
好了,现在run一下,我们可以看看是什么样的。
可以看到了,跟我们预期的一样。
最后给大家列一下Spinner的其他xml标签属性:
android:popupBackground:拉出的菜单的背景颜色。
android:spinnerMode:设置Spinner的点开方式:dialog窗口形式、dropdown下拉形式。
Spinner点击事件
很简单,唯一要注意的就是他不是用clickListener的,而是itemSelectedListener。第一个函数是我们点击了哪个item,他就会触发。第二个不用管了。