安卓开发中spinner的三级联动

来源:互联网 发布:叮叮摩卡软件 编辑:程序博客网 时间:2024/06/06 10:38

spinner 的三级联动用法

需求:将省,市,县从xml文档中解析出来,并展示到spinner控件中,当选中省级spinner时,相应的市级和县级会有相应的变化,选了省级以后再选市级,县级也会有相应的变化

方法:采用adapter链接数据源和控件,采用pull解析解析出数据,使用onItemSelectetListenner监听spinner的变化

(1)以下是xml文件中的部分代码,这里只做个样本

<?xml version="1.0" encoding="utf-8"?>
<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>


<p p_id = "03">
<pn>天津</pn>
<c c_id="0301"><cn>天津</cn>
<d d_id="101030100">天津</d>
<d d_id="101030200">武清</d>
<d d_id="101030300">宝坻</d>
<d d_id="101030400">东丽</d>
<d d_id="101030500">西青</d>
<d d_id="101030600">北辰</d>
<d d_id="101030700">宁河</d>
<d d_id="101030800">汉沽</d>
<d d_id="101030900">静海</d>
<d d_id="101031000">津南</d>
<d d_id="101031100">塘沽</d>
<d d_id="101031200">大港</d>
<d d_id="101031400">蓟县</d>
</c>
</p>


<p p_id = "04">
<pn>重庆</pn>
<c c_id="0401"><cn>重庆</cn>
<d d_id="101040100">重庆</d>
<d d_id="101040200">永川</d>
<d d_id="101040300">合川</d>
<d d_id="101040400">南川</d>
<d d_id="101040500">江津</d>
<d d_id="101040600">万盛</d>
<d d_id="101040700">渝北</d>
<d d_id="101040800">北碚</d>
<d d_id="101040900">巴南</d>
<d d_id="101041000">长寿</d>
<d d_id="101041100">黔江</d>
<d d_id="101041300">万州</d>
<d d_id="101041400">涪陵</d>
<d d_id="101041500">开县</d>
<d d_id="101041600">城口</d>
<d d_id="101041700">云阳</d>
<d d_id="101041800">巫溪</d>
<d d_id="101041900">奉节</d>
<d d_id="101042000">巫山</d>
<d d_id="101042100">潼南</d>
<d d_id="101042200">垫江</d>
<d d_id="101042300">梁平</d>
<d d_id="101042400">忠县</d>
<d d_id="101042500">石柱</d>
<d d_id="101042600">大足</d>
<d d_id="101042700">荣昌</d>
<d d_id="101042800">铜梁</d>
<d d_id="101042900">璧山</d>
<d d_id="101043000">丰都</d>
<d d_id="101043100">武隆</d>
<d d_id="101043200">彭水</d>
<d d_id="101043300">綦江</d>
<d d_id="101043400">酉阳</d>
<d d_id="101043600">秀山</d>
</c>
</p>


<p p_id = "05">
<pn>黑龙江</pn>
<c c_id="0501"><cn>哈尔滨</cn>
<d d_id="101050101">哈尔滨</d>
<d d_id="101050102">双城</d>
<d d_id="101050103">呼兰</d>
<d d_id="101050104">阿城</d>
<d d_id="101050105">宾县</d>
<d d_id="101050106">依兰</d>
<d d_id="101050107">巴彦</d>
<d d_id="101050108">通河</d>
<d d_id="101050109">方正</d>
<d d_id="101050110">延寿</d>
<d d_id="101050111">尚志</d>
<d d_id="101050112">五常</d>
<d d_id="101050113">木兰</d>
</c>
<c c_id="0502"><cn>齐齐哈尔</cn>
<d d_id="101050201">齐齐哈尔</d>
<d d_id="101050202">讷河</d>
<d d_id="101050203">龙江</d>
<d d_id="101050204">甘南</d>
<d d_id="101050205">富裕</d>
<d d_id="101050206">依安</d>
<d d_id="101050207">拜泉</d>
<d d_id="101050208">克山</d>
<d d_id="101050209">克东</d>
<d d_id="101050210">泰来</d>
</c>
<c c_id="0503"><cn>牡丹江</cn>
<d d_id="101050301">牡丹江</d>
<d d_id="101050302">海林</d>
<d d_id="101050303">穆棱</d>
<d d_id="101050304">林口</d>
<d d_id="101050305">绥芬河</d>
<d d_id="101050306">宁安</d>
<d d_id="101050307">东宁</d>
</c>
<c c_id="0504"><cn>佳木斯</cn>
<d d_id="101050401">佳木斯</d>
<d d_id="101050402">汤原</d>
<d d_id="101050403">抚远</d>
<d d_id="101050404">桦川</d>
<d d_id="101050405">桦南</d>
<d d_id="101050406">同江</d>
<d d_id="101050407">富锦</d>
</c>
<c c_id="0505"><cn>绥化</cn>
<d d_id="101050501">绥化</d>
<d d_id="101050502">肇东</d>
<d d_id="101050503">安达</d>
<d d_id="101050504">海伦</d>
<d d_id="101050505">明水</d>
<d d_id="101050506">望奎</d>
<d d_id="101050507">兰西</d>
<d d_id="101050508">青冈</d>
<d d_id="101050509">庆安</d>
<d d_id="101050510">绥棱</d>
</c>
<c c_id="0506"><cn>黑河</cn>
<d d_id="101050601">黑河</d>
<d d_id="101050602">嫩江</d>
<d d_id="101050603">孙吴</d>
<d d_id="101050604">逊克</d>
<d d_id="101050605">五大连池</d>
<d d_id="101050606">北安</d>
</c>
<c c_id="0507"><cn>大兴安岭</cn>
<d d_id="101050701">大兴安岭</d>
<d d_id="101050702">塔河</d>
<d d_id="101050703">漠河</d>
<d d_id="101050704">呼玛</d>
<d d_id="101050705">呼中</d>
<d d_id="101050706">新林</d>
<d d_id="101050708">加格达奇</d>
</c>
<c c_id="0508"><cn>伊春</cn>
<d d_id="101050801">伊春</d>
<d d_id="101050802">乌伊岭</d>
<d d_id="101050803">五营</d>
<d d_id="101050804">铁力</d>
<d d_id="101050805">嘉荫</d>
</c>
<c c_id="0509"><cn>大庆</cn>
<d d_id="101050901">大庆</d>
<d d_id="101050902">林甸</d>
<d d_id="101050903">肇州</d>
<d d_id="101050904">肇源</d>
<d d_id="101050905">杜尔伯特</d>
</c>
<c c_id="0510"><cn>七台河</cn>
<d d_id="101051002">七台河</d>
<d d_id="101051003">勃利</d>
</c>
<c c_id="0511"><cn>鸡西</cn>
<d d_id="101051101">鸡西</d>
<d d_id="101051102">虎林</d>
<d d_id="101051103">密山</d>
<d d_id="101051104">鸡东</d>
</c>
<c c_id="0512"><cn>鹤岗</cn>
<d d_id="101051201">鹤岗</d>
<d d_id="101051202">绥滨</d>
<d d_id="101051203">萝北</d>
</c>
<c c_id="0513"><cn>双鸭山</cn>
<d d_id="101051301">双鸭山</d>
<d d_id="101051302">集贤</d>
<d d_id="101051303">宝清</d>
<d d_id="101051304">饶河</d>
<d d_id="101051305">友谊</d>
</c>
</p>


(2)下面便是关键代码了

package com.example.day04spinner041;


import java.io.IOException;
import java.util.ArrayList;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;


import android.location.Address;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;


public class MainActivity extends Activity {
private Spinner spprovince,spcity,spviLlage;
private ArrayList<String> pidlist,pnamelist,cidlist,cnamelist,vidlist,vnamelist,allnamelist;
private ArrayAdapter<String> provinceaddpter,cityadapter,villageadapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        spprovince=(Spinner) findViewById(R.id.spprovince);
        spcity=(Spinner) findViewById(R.id.spcity);
        spviLlage=(Spinner) findViewById(R.id.spvillage);
        
        getProvince();
        
        provinceaddpter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,pnamelist);
        cityadapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);
        villageadapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);
       
        spprovince.setAdapter(provinceaddpter);
       spcity.setAdapter(cityadapter);
       spviLlage.setAdapter(villageadapter);
       //spinner的监听事件
       spcity.setOnItemSelectedListener(new OnItemSelectedListener() {


@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String cid=cidlist.get(position);
getVillage(cid);

villageadapter.clear();
villageadapter.addAll(vnamelist);

}




@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}
});
      
       spprovince.setOnItemSelectedListener(new OnItemSelectedListener() {



public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String pid=pidlist.get(position);
getCity(pid);
cityadapter.clear();
cityadapter.addAll(cnamelist);

getVillage(cidlist.get(position));
villageadapter.clear();
villageadapter.addAll(vnamelist);


}


@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub

}
});
    }
//解析省级数据(xml解析)
public void getProvince() {
XmlResourceParser parser=getResources().getXml(R.xml.cities);
try {
int type=parser.getEventType();
while(type!=1){
String tag=parser.getName();
switch(type){
case 0:
pidlist=new ArrayList<String>();
pnamelist=new ArrayList<String>();
break;
case 2:
if("p".equals(tag)){
pidlist.add(parser.getAttributeValue(0));
}
if("pn".equals(tag)){
pnamelist.add(parser.nextText());
}
break;

}
type=parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

//解析市级数据
public void getCity(String pid) {
XmlPullParser parser=getResources().getXml(R.xml.cities);
try {
int type=parser.getEventType();
while(type!=1){
String tag=parser.getName();
switch(type){
case 0:
cidlist=new ArrayList<String>();
cnamelist=new ArrayList<String>();
break;
case 2:
if("c".equals(tag)){
String cid=parser.getAttributeValue(0);
if(cid.startsWith(pid)){
cidlist.add(cid);
parser.nextTag();
cnamelist.add(parser.nextText());
}
}

break;

}
type=parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

//解析县级数据
public void getVillage(String cid) {
    XmlPullParser parser=getResources().getXml(R.xml.cities);
    try {
    int type=parser.getEventType();
    while(type!=1){
    String tag=parser.getName();
    switch (type) {
    case 0:
    vidlist=new ArrayList<String>();
    vnamelist=new ArrayList<String>();
    
    break;
    
    case 2:
    if("d".equals(tag)){
    String vid=parser.getAttributeValue(0);
    if(vid.contains(cid)){
    vidlist.add(vid);
    vnamelist.add(parser.nextText());
    }
    }
    break;
    }
    type=parser.next();
    }
    } catch (XmlPullParserException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    
     }
    
}

0 0
原创粉丝点击