文档章节

android基本控件示例两个Spinner下拉列表的关联(04)

f
 flyqilong
发布于 2016/01/16 17:43
字数 733
阅读 58
收藏 0
//两个下拉列表Spinner的关联
public class MainActivity extends Activity {
	private Spinner provice_sp;
	private Spinner city_sp;
	private ArrayAdapter<String> provice_adapter;
	private ArrayAdapter<String> city_adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		provice_sp = (Spinner) this.findViewById(R.id.provice_sp);
		city_sp = (Spinner) this.findViewById(R.id.city_sp);
		// 从xml文件中加载数据给适配器绑定数据
		XmlPullParser parser = getResources().getXml(R.xml.citys_weather);
		final Map<String, List<String>> dataMap = parserXMLData(parser);
		// 建适配器//加载省份的spinner数据
		Set<String> set = dataMap.keySet();// 省份作为键值
		// 因为适配器不能放集合,但可以放list数组,所以转换为list
		List<String> provicelist = new ArrayList<String>(set);
		provice_adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, provicelist);
		provice_sp.setAdapter(provice_adapter);// 关联绑定适配器
		city_adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1);
		// 城市先不给数据源,先关联绑定适配器,数据下面再给
		city_sp.setAdapter(city_adapter);
		// 设置监听,点击省份的时候产生事件
		provice_sp.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// 这里addAll会报错,改版本就行,它是高版本的,所以要改版本号
				city_adapter.clear();// 每次都清空前面点击后添加的内容,否则他会累积
				// 法1
				String name = parent.getSelectedItem().toString();
				// 法2://String name=provice_adapter.getItem(position);
				// 法3://String
				// name=parent.getItemAtPosition(position).toString();
				city_adapter.addAll(dataMap.get(name));//省名作为键,通过键就可以获得该省的城市
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {

			}
		});
	}

	private Map<String, List<String>> parserXMLData(XmlPullParser parser) {
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		List<String> citylist = null;
		try {
			int event = parser.getEventType();
			while (event != XmlPullParser.END_DOCUMENT) {
				switch (event) {
				case XmlPullParser.START_DOCUMENT:
					break;
				// 注意START_DOCUMENT只执行一次,所以不能在这里实例化城市,因为p循环调用的
				case XmlPullParser.START_TAG:
					if ("p".equals(parser.getName())) {
						// 进入时实例化城市集合
						citylist = new ArrayList<String>();
					}
					if ("pn".equals(parser.getName())) {
						map.put(parser.nextText(), citylist);// list在后面再加
					}
					if ("d".equals(parser.getName())) {
						citylist.add(parser.nextText());
					}

					break;
				case XmlPullParser.END_TAG:
					if ("p".equals(parser.getName())) {
						citylist = null;
					}
					break;
				}
				event = parser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
}
//布局文件:相对布局

    <Spinner
        android:id="@+id/provice_sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="" />
    <Spinner
        android:id="@+id/city_sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/provice_sp"
        android:text="" />
 //文件citys_weather.xml
 <citylist>
	<p p_id = "01">
	<pn>北京</pn>
	<c c_id="0101"><cn>北京</cn>
		<d d_id="101010100">北京</d>
		<d d_id="101010200">海淀</d>
		<d d_id="101010300">朝阳</d>
		<d d_id="101010400">顺义</d>
		<d d_id="101010500">怀柔</d>
		<d d_id="101010600">通州</d>
		<d d_id="101010700">昌平</d>
		<d d_id="101010800">延庆</d>
		<d d_id="101010900">丰台</d>
		<d d_id="101011000">石景山</d>
		<d d_id="101011100">大兴</d>
		<d d_id="101011200">房山</d>
		<d d_id="101011300">密云</d>
		<d d_id="101011400">门头沟</d>
		<d d_id="101011500">平谷</d>
	</c>
	</p>

	<p p_id = "02">
	<pn>上海</pn>
		<c c_id="0201"><cn>上海</cn>
				<d d_id="101020100">上海</d>
				<d d_id="101020200">闵行</d>
				<d d_id="101020300">宝山</d>
				<d d_id="101020500">嘉定</d>
				<d d_id="101020600">浦东南汇</d>
				<d d_id="101020700">金山</d>
				<d d_id="101020800">青浦</d>
				<d d_id="101020900">松江</d>
				<d d_id="101021000">奉贤</d>
				<d d_id="101021100">崇明</d>
				<d d_id="101021200">徐家汇</d>
				<d d_id="101021300">浦东</d>
			</c>
		</p>
 </citylist>


© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
如何改变Activity的显示方向

本示例演示如何通过Activity了的setRequestedOrientation()方法来设定Activity的显示方向。 本示例在Eclipse上编译测试。 1. 定义清单文件(AndroidManifest.xml) 2. 定义字符串资源(strin...

长平狐
2012/10/16
399
0
Android 之 下拉框(Spinner)的使用

下拉列表 Spinner。 Spinner的使用,可以极大提高用户的体验性。当需要用户选择的时候,可以提供一个下拉列表将所有可选的项列出来。供用户选择。 Demo如下,可以留作参考 一、使用数组作为数...

鉴客
2011/12/01
169.8K
16
【android基础学习之四】——基础控件CheckBox,Spinner,AutoCompleteTextView,DatePicker,TimePicker

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
2.1K
0
Spinner 下拉列表

spinner就相当于Html中的下拉列表框,在下面的例子里我们共同学习一下spinner的使用。在这一小节,让我们建一个小关于色彩的下拉列表,当某一个选项被选择时,弹出一个吐司消息。 1、建一个新...

鉴客
2011/12/01
4.7K
0
Android Spinner

下拉列表(Spinner)是一个每次只能选择所有项中一项的部件。它的项来自于与之相关联的适配器中。 XML Attributes Attribute Name Related Method Description android:gravity setGravity(...

amigos_wu
2012/06/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySql双主架构原理

在企业中,一般系统架构的瓶颈会出现在数据库这一部分,mysql主从架构在很大程度上解决了这部分瓶颈,但是在mysql主从同步的架构也存在很多问题;比如:1.关于数据写入部分(也就是主库)往往很难做...

xiaomin0322
7分钟前
0
0
分布式系统中一致性哈希

问题场景 近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容错等问题。功能强大也意味着实现起来需要更多...

Java领航员
9分钟前
0
0
接口限流算法:漏桶算法和令牌桶算法

漏桶算法 漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。这一点和线程池原理是很相似的。 把请求比作是水,水来了都先放进桶里,并以限定...

铁骨铮铮
16分钟前
0
0
Android 生成二维码工具类

/** * 生成条形码和二维码的工具 */public class ZXingUtils { /** * 生成二维码 要转换的地址或字符串,可以是中文 * * @param url * @param width ...

lanyu96
21分钟前
0
0
谈谈lucene的DocValues特性之SortedNumericDocValuesField

前面已经介绍过NumericDocValuesField,这里想强调一下SortedNumericDocValuesField是针对同一篇文档中一键多值的情况进行排序的,换句话说不同文档的同一字段值可以乱序。核心的写入流程与谈...

FAT_mt
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部