下拉列表框也是一种常用的组件,形状类似于html的select。功能的话和那个单选按钮有些类似。这次的话就使用这个下拉列表框做一个城市和区域联动的小例子,数据的话简单起见就弄成静态的。就不先扯淡了。
1.先来看下下拉列表框的标签
<Spinner
android:id="@+id/city"
android:prompt="@string/city_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/city_name"
/>
这里要注意的就是2处,prompt是列表框的提示如图所示,entries当然就是下拉的内容了,也就是下面显示的上海、南京、昆明
2.下面就开始一步一步的写这个小例子了,首先写一下静态的数据。我打算把城市写在一个xml文件里。下面是我的xml文件这个文件就放在values文件夹下
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="city_name">
<item>上海</item>
<item>南京</item>
<item>昆明</item>
</string-array>
</resources>
为了让大家看的更清楚,我把strings.xml也贴出来了
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, SpinnerActivity!</string>
<string name="app_name">spinner</string>
<string name="city_label">选择城市</string>
<string name="area_label">选择城市</string>
</resources>
城市的下拉没问题了剩下的就是,区域的级联了,在这里区域就把他放在一个数组里。这里就要用到ArrayAdapter了,对应的事件就是下拉改变事件了这个事件也有一个监听器叫做setOnItemSelectedListener。联动效果是怎么来的呢,其实很简单只需要城市下拉改变我们就把对应的区域动态的添加到二级下拉就OK了。这个操作就需要ArrayAdapterd的支持了。下面先把ArrayAdapter和区域定义一下
//定义一个字符数组,用来填充区域
private String[][] areaData=new String[][]{{"浦东新区","徐汇区","普陀区","杨浦区"},{"雨花台区","白下区"},{"西山区","北市区"}};
//定义下拉列表适配器,用于填充内容
private ArrayAdapter<CharSequence> adapterArea=null;
下面就是这个Adapter的用法了
//实例化列表项
adapterArea=new ArrayAdapter<CharSequence>(SpinnerActivity.this,android.R.layout.simple_spinner_item,SpinnerActivity.this.areaData[position]);
//设置列表显示风格
adapterArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
area.setAdapter(adapterArea);
对于第一句,第一个参数就是上下文,第二个参数就是下拉框的显示风格,第三个就是我们要填到下拉的数据了
第二句就是设置下拉框内容的风格了,不写的话显示的是这个样子
写了的话是这个样子
说了这么多我就把全部的代码贴出来了,里面也夹杂着一个图片的长按事件这个操作可以切换手机桌面,换桌面的时候不要忘了授权
<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>
下面是java代码
package org.lxh.spinner;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;
public class SpinnerActivity extends Activity {
private ImageView image=null;
private Spinner city=null;
private Spinner area=null;
//定义一个字符数组,用来填充区域
private String[][] areaData=new String[][]{{"浦东新区","徐汇区","普陀区","杨浦区"},{"雨花台区","白下区"},{"西山区","北市区"}};
//定义下拉列表适配器,用于填充内容
private ArrayAdapter<CharSequence> adapterArea=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
city=(Spinner)this.findViewById(R.id.city);
area=(Spinner)this.findViewById(R.id.area);
image=(ImageView)this.findViewById(R.id.wall);
image.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
//设置桌面之前要先清除单前的桌面
try {
SpinnerActivity.this.clearWallpaper();
SpinnerActivity.this.setWallpaper(image.getResources().openRawResource(R.drawable.fengj));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
});
area.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(SpinnerActivity.this, parent.getItemAtPosition(position).toString(), 1).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
city.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//实例化列表项
adapterArea=new ArrayAdapter<CharSequence>(SpinnerActivity.this,android.R.layout.simple_spinner_item,SpinnerActivity.this.areaData[position]);
//设置列表显示风格
adapterArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
area.setAdapter(adapterArea);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
下面补上main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Spinner
android:id="@+id/city"
android:prompt="@string/city_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/city_name"
/>
<Spinner
android:id="@+id/area"
android:prompt="@string/area_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/wall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fengj"
/>
</LinearLayout>
到这里程序就写完了,还是一样有问题就写评论或加我qq.