Android使用SAX解析XML(3)
主界面MainActivity.java:
package com.hzhi.my_sax; import java.util.ArrayList; import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener; public class MainActivity extends Activity implements OnItemSelectedListener{ public static final String str_school = "School";
public static final String str_major = "Major";
public static final String str_clas = "Class"; // 控件变量
public Spinner spn_school;
public Spinner spn_major;
public Spinner spn_clas;
public infor m_infor; // 适配器容器
public ArrayList<school> arr_school = new ArrayList<school>();
public ArrayList<major> arr_major = new ArrayList<major>();
public ArrayList<clas> arr_clas = new ArrayList<clas>(); // 选择的项目编号
public int pos_school;
public int pos_major;
public int pos_class; // 选择班级次数
public int c_num = 0; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 获得控件
get_con(); // 设置适配器
ArrayAdapter<school> ada_school = new ArrayAdapter<school>(this,
android.R.layout.simple_spinner_item, arr_school);
ada_school.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spn_school.setAdapter(ada_school); ArrayAdapter<major> ada_major = new ArrayAdapter<major>(this,
android.R.layout.simple_spinner_item, arr_major);
ada_major.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spn_major.setAdapter(ada_major); ArrayAdapter<clas> ada_clas = new ArrayAdapter<clas>(this,
android.R.layout.simple_spinner_item, arr_clas);
ada_clas.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spn_clas.setAdapter(ada_clas); // 设置监听器
spn_school.setOnItemSelectedListener(this);
spn_major.setOnItemSelectedListener(this);
spn_clas.setOnItemSelectedListener(this); m_infor = new infor();
init(); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} // 获得控件
public void get_con(){ spn_school = (Spinner) findViewById(R.id.spn_school);
spn_major = (Spinner) findViewById(R.id.spn_major);
spn_clas = (Spinner) findViewById(R.id.spn_class); } // 选择学院
public void do_school_select() { //清除数据集
arr_major.clear();
arr_clas.clear();
//设置数据集
arr_major.addAll(m_infor.get_schools().get(pos_school).get_majors());
arr_clas.addAll(
m_infor.get_schools().get(pos_school).get_majors().get(0).get_clases());
//通知数据集改变
((ArrayAdapter)this.spn_major.getAdapter()).notifyDataSetChanged();
((ArrayAdapter)this.spn_clas.getAdapter()).notifyDataSetChanged();
//初始化设置选择项
this.spn_major.setSelection(0);
this.spn_clas.setSelection(0); c_num = 0; } // 选择专业
public void do_major_select() { //清除数据集
arr_clas.clear();
//设置数据集
arr_clas.addAll(
m_infor.get_schools().get(pos_school).get_majors().get(pos_major).get_clases());
//通知数据集改变
((ArrayAdapter)spn_clas.getAdapter()).notifyDataSetChanged();
//初始化设置选择项
spn_clas.setSelection(0); c_num = 0; } // 选择班级
public void do_class_select(){ if (c_num>0)
{
school b_school = m_infor.get_schools().get(pos_school);
major b_major = b_school.get_majors().get(pos_major);
clas b_clas = b_major.get_clases().get(pos_class); Intent i = new Intent(this, DetailActivity.class);
i.putExtra(str_school, b_school);
i.putExtra(str_major, b_major);
i.putExtra(str_clas, b_clas);
this.startActivity(i);
} c_num++; } @Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// TODO Auto-generated method stub switch(parent.getId()) {
case R.id.spn_school: {
pos_school = pos;
do_school_select();
break;
}
case R.id.spn_major: {
pos_major = pos;
do_major_select();
break;
}
case R.id.spn_class: {
pos_class = pos;
do_class_select();
break;
}
}
} @Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub } // 清除数据集
public void clear_all_dataset(){ arr_school.clear();
arr_major.clear();
arr_clas.clear(); } // 通知所有数据集已经改变
public void notify_all_dataset(){
((ArrayAdapter) spn_school.getAdapter()).notifyDataSetChanged();
((ArrayAdapter) spn_major.getAdapter()).notifyDataSetChanged();
((ArrayAdapter) spn_clas.getAdapter()).notifyDataSetChanged();
} // 设置数据集
public void add_all_dataset(){ arr_school.addAll(m_infor.get_schools());
arr_major.addAll(m_infor.get_schools().get(0).get_majors());
arr_clas.addAll(m_infor.get_schools().get(0).get_majors().
get(0).get_clases()); } // 初始化界面
public void init(){ super.onStart();
util.get_ins().parse(
getResources().openRawResource(R.raw.infor),m_infor); // 清除数据集
clear_all_dataset();
// 设置数据集
add_all_dataset();
// 通知数据集改变
notify_all_dataset(); } }
最重要的语句是init()函数里面的
util.get_ins().parse(getResources().openRawResource(R.raw.infor),m_infor);
这条语句开始了解析infor.xml文件的过程,并将解析的结果放在变量m_infor里面。
Android使用SAX解析XML(3)的更多相关文章
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android使用SAX解析XML(1)
可扩展标记语言XML是一种数据交换格式,允许用户自己定义,适合Web传输,能提供独立于程序的数据.XML在Android中也有广泛的应用,Android解析XML的方法有很多,本文介绍使用SAX(Si ...
- Android使用SAX解析XML(4)
util.java文件如下: package com.hzhi.my_sax; import java.io.IOException; import java.io.InputStream; impo ...
- Android使用SAX解析xml
一.理论准备 SAX采用事件驱动机制来解析XML文档,每当SAX解析器发现文档开始.元素开始.文本.元素结束.文档结束等事件时,就会向外发送一次事件,而开发者则可以通过编写事件监听器处理这些事 ...
- Android使用SAX解析XML(5)
parse_handler.java文件: package com.hzhi.my_sax; import org.xml.sax.Attributes; import org.xml.sax.SAX ...
- Android使用SAX解析XML(2)
school类包含了一个major列表,可以增加该列表的元素,以及返回该列表,还实现了Parcelable.Creator接口. package com.hzhi.my_sax; import jav ...
- Android使用SAX解析XML(6)
应用截图: (1)开始运行时 (2)选择学院 (3)选择专业 (4)选择班级 (5)选择班级的详细信息 本文参考了<Android平台开发之旅>.
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- Android SAX解析XML
本篇讲解一下SAX解析XML这种方式,首先来看一下它的基本介绍: SAX是一种以事件驱动的XML API,由它定义的事件流可以指定从解析器传到专门的处理程序的代码的XML结构,简单的讲,它是种解析速度 ...
随机推荐
- Android笔记——了解SDK,数据库sqlite的使用
一.adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具 ...
- ubuntu下在apache部署python站点
ubuntu下在apache部署python站点 我的是ubuntu14 32为的虚拟机,默认安装的python为3.4 环境:apache + mysql + django + python3 软件 ...
- JavaScript的陷阱
这本来是翻译Estelle Weyl的<15 JavaScript Gotchas>,里面介绍的都是在JavaScript编程实践中平时容易出错或需要注意的地方,并提供避开这些陷阱的方法, ...
- android api sdk
Platform Version API Level VERSION_CODE Notes Android 6.0 23 M API Changes Android 5.1 22 LOLLIPOP_M ...
- poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)
LCA思想:http://www.cnblogs.com/hujunzheng/p/3945885.html 在求解最近公共祖先为问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好 ...
- 机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)
为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的.不得不说,网络上关于语音识别的通俗 ...
- 轻松自动化---selenium-webdriver(python) (四)
本节要解决的问题: 如何定位一组元素? 场景 从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象, 这时候就需 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
<Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- 重读 code complete 说说代码质量
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...
- Windows Azure Cloud Service (10) Role的生命周期
<Windows Azure Platform 系列文章目录> 在上一章内容中,我们提到了Windows Azure会依次调用角色(Role)实例的OnStart()方法和Run()方法. ...