Spinner下拉列表
Android提供了两种常用的列表式组件:ListView和Spinner。ListView表示列表选择组件,Spinner表示下拉列表选择组件。
Spinner即下拉列表框,它提供了从一个数据集合中快速选择一项值的办法,默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。它是ViewGroup的间接子类,因此可以作为容器使用。
Spinner常用属性
如何使用Spinner?
在布局文件中定义控件
在Activity中引用该控件
创建一个适配器(ArrayAdapter)为Spinner控件提供数据
设置ArrayAdapter
为Spinner控件创建监听器
绑定监听器
Step1 :Spinner的定义
在布局文件中定义控件,代码如下:
<Spinner
android:id="@+id/sp"
android:layoutheight="wrap_content"
android:layout_width="match_parent"/>
在java中定义对象:
Spinner spin
Step2 Spinner控件的引用
spin=(Spinner) this. findViewByld(R.id.sp);
Step3 Spinner的数据供给(使用适配器)
适配器是连接控件与数据的桥梁,几种常用的Adapter:
Array Adapter:数组适配器,是最简单的Adapter,适用于列表项中单一文本的情况;
SimpleAdapter:每一个列表项中可以含有不同的子控件;
SimpleCursorAdapter:数据源为数据库;
Spinner的重要用法
ArrayAdapter的用法1:使用字符串数组作为数据来源
String[] arr = {“全部”,“唱歌”,“画画”,“钢琴”, “运动”}
设置ArrayAdapter:
ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R. layout. Simple_spinner _item , arr);
参数说明:ArrayAdapter有3个参数:
第一个参数为Context,
第二个参数为布局文件,
第三个参数为数组(即显示在下拉列表中的内容,不能用int型数组)。此例第二参数应用了Android自带的布局文件,也可以使用用户用户自定义的布局文件来控制列表每个条目的样式。
ArrayAdapter的用法2: 使用XML作为数据来源
在使用XML作为数据来源,需要使用XML文件将下拉菜单列出的所有内容放到values目录下的strings.xml资源文件中,strings.xml的代码如下:
<?xml version="1.0"encoding="utf-8"?>
<resources>
<string-array name="provinces array">
<item>江苏省</item>
<item>浙江省</item>
<item>上海市</item>
<item>北京市</item>
<item>湖南省</item>
<item>黑龙江省</item>
<item>辽宁省</item>
</string-array>
</resources>
设置ArrayAdapter
将适配器与Spinner相关联:
spinner.setAdapter(adapter);
创建一个监听器:
class SpinnerListener implements OnltemSelectedListener
@Override
public void onltemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3){
String selected = arg0.getltemAtPosition(arg2).toString();//获取选中项文本内容
Toast.makeText(MainActivity.this,“您选择的是:"+selected).show();
当用户选定了一个条目时,就会调用该方法。第一个参数指整个列表的View对象,第二个参数指被选中条目的View对象,第三个参数指被选中条目的位置,第四个参数指被选中条目的id。上述代码的第4行根据AdapterView中选中条目的位置返回值,这条语句也可以修改为:
String selected =spinner.getSelecteditem();
Step 5: 为控件绑定适配器
spin. setAdapter(adapter);
Step 6: 为控件绑定监听器
List View
在Android开发中,ListView是一个比较常用的控件。它以列表的形式展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。
使用ListView通常有两个功能:
将数据填充到布局
处理用户的选择点击操作
使用ListView组件开发应用程序时必须包含3个关键要素:
List View中每一行的View;
填入到view中的数据(被映射的字符串、图片或基本组件)
连接数据与ListView的Adapter
ArrayAdapter与ListView
在界面布局文件中添加ListView组件:
<ListView
android:id="@+id/listview"
android:layout width="fill parent"
android:layout height="fill parent"/>
为ArrayAdapter装配数据:
String[] items ={“周一”,“周二”,“周三”,“周四”,“周五”,“周六”, “周日” };
//定义一个数组适配器
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list item 1,items);
//将适配器与ListView相关联
lv.setAdapter(adapter);
List View可以通过调用setOnltemClickListener()接口方法设置“点击”ListView某一项的监听事件。
public boolean onltemLongClick(AdapterView<?> parent, View view, int position, long id)
也可以通过调用setOnltemLongClickListener()接口方法设置“长按”ListView某一项的监听事件。
public void onltemClick(AdapterView<?> parent, View view, int position, long id)
第一参数表示事件发生的AdapterView;第二参数表示单击或长按的ListView的某一项View;第三个参数表示单击或长按的这一项在Adapter中的位置(从0开始计数);第四个参数表示单击或长按的这一项在ListView中对应的位置(从0开始计数)。
用匿名内部类实现Toast显示单击ListView中某一项内容的代码如下:
lv.setOnltemClickListener(new AdapterView.OnltemClickListener(){
@Override
public void onltemClick(AdapterView<?> parent,View view,int position,long id){
textView tv =(textView)view;
Toast.makeText(CostomListActivity.this,tv.getText().toString()+“:”
+items[position],Toast.LENGTH_SHORT).show();
};
Simple Adapter与ListView
在功能代码块中(Activity.java)定义一个HashMap构成的List(列表),将数据以键值对的方式存放在里面,然后构造SimpleAdapter对象,并将数据装配到该适配中。
Simple Adapter(参数1,参数2,参数3,参数4,参数5)
第一个参数为上下文;
第二个参数为用HashMap<String,Object>构成的List;
第三个多ListView上显示的每一行布局文件;
第四个参数为HashMap中所有键构成的字符串数
第五个参数为ListView上每一行布局文件中对应组件ID构成的int型数组。
欢迎大家加我微信交流讨论(请备注csdn上添加)