Android之省市县三级联动

layout布局

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0099CC"
    android:scrollbars="vertical"
    android:overScrollMode="always"
    tools:context=".LoginActivity">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#F5F5F5"
                    android:layout_margin="5sp"
                    android:orientation="vertical">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/location"
                        android:textSize="12sp" />
                    <GridLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:columnCount="3">
                        <Spinner
                            android:id="@+id/province"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            tools:targetApi="lollipop">
                        </Spinner>
                        <Spinner
                            android:id="@+id/city"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            tools:targetApi="lollipop">
                        </Spinner>
                        <Spinner
                            android:id="@+id/county"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            tools:targetApi="lollipop">
                        </Spinner>
                    </GridLayout>

                </LinearLayout>
             





</ScrollView>

java代码:

package com.example.login;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import java.io.*;
import org.xmlpull.v1.XmlPullParserException;
import java.text.*;
import java.util.*;

public class LoginActivity extends AppCompatActivity {
    private Spinner sp_province,sp_city,sp_county;
    
    private ArrayAdapter<Province> provinceArrayAdapter;
    private ArrayAdapter<City> cityArrayAdapter;
    private ArrayAdapter<County> countyArrayAdapter;
    private List<Province> provinces;
    private int prov_position;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_main);

        Intent intent=getIntent();

        //得到容器视图
        sp_city=(Spinner)findViewById(R.id.city);
        sp_county=(Spinner)findViewById(R.id.county);
        sp_province=(Spinner)findViewById(R.id.province);


        //得到解析后的数据
        InputStream is = getResources().openRawResource(R.raw.locations);
        try { provinces= LocationService.getProvince(is);
        }catch (XmlPullParserException |IOException e)
        { e.printStackTrace(); }
        //设置省的适配器
        provinceArrayAdapter = new ArrayAdapter<Province>(this, android.R.layout.simple_spinner_item, provinces);
        sp_province.setAdapter(provinceArrayAdapter);
        sp_province.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                prov_position = position;
                //设置市的适配器
               cityArrayAdapter = new ArrayAdapter<City>(LoginActivity.this, android.R.layout.simple_spinner_item, provinces.get(position).getCitys());
               sp_city.setAdapter(cityArrayAdapter);

            }

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

            }
        });
        sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id)
            {
                //设置地区的适配器
                countyArrayAdapter= new ArrayAdapter<County>(LoginActivity.this, android.R.layout.simple_spinner_item, provinces.get(prov_position).getCitys().get(position).getCounties());
                sp_county.setAdapter(countyArrayAdapter);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {
            }
        });

 
	}

}

city.java

package com.example.login;

import java.util.List;

public class City {
    private String  id;
    private  String name;
    private List<County> counties;

    public City() {
        super();
    }
    public City(String id, String name, List<County> counties) {
        super();
        this.id = id;
        this.name = name;
        this.counties = counties;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List<County> getCounties() {
        return counties;
    }

    public void setCounties(List<County> counties) {
        this.counties = counties;
    }
    public String toString() {
        return name;
    }
}

County .java

package com.example.login;

public class County {
    private String  id;
    private  String name;

    public County() {
        super();
    }

    public County(String id, String name) {
        super();
        this.id = id;
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

Province .java

package com.example.login;


import java.util.List;

public class Province {
    private String  id;
    private  String name;
    private List<City> citys;
    public  Province()
    {
        super();
    }
    public Province(String id,String name,List<City> citys)
    {
        super();
        this.name=name;
        this.id=id;
        this.citys=citys;
    }

    @Override
    public String toString() {
        return name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List<City> getCitys() {
        return citys;
    }

    public void setCitys(List<City> citys) {
        this.citys = citys;
    }
}

LocationService .java

package com.example.login;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

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

public class LocationService {
    public static List<Province> getProvince(InputStream is) throws XmlPullParserException, IOException {
        List<Province>provinces =null;
        Province province=null;
        List<City> cities=null;
        City city=null;
        List<County> counties=null;
        County county=null;

        String tagName=null;

        //初始化解析器
        XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
        XmlPullParser parser=factory.newPullParser();

        parser.setInput(is,"utf-8");

        int event = parser.getEventType();
        while(event!=XmlPullParser.END_DOCUMENT)
        {
            switch (event)
            {
                case XmlPullParser.START_TAG:
                    tagName=parser.getName();
                    if ("citylist".equals(tagName))
                    {
                        provinces = new ArrayList<Province>();
                    }
                    else if("p".equals(tagName))
                    {
                        province=new Province();
                        cities = new ArrayList<City>();
                        int count =parser.getAttributeCount();
                        for(int i=0;i<count;i++)
                        {
                            String attName =parser.getAttributeName(i);
                            String attValue = parser.getAttributeValue(i);
                            if("p_id".equals(attName))
                            {
                               province.setId(attValue);
                            }
                        }
                    }
                    else if("pn".equals(tagName))
                    {
                       province.setName(parser.nextText());
                    }
                    else if("c".equals(tagName))
                    {
                        city = new City();
                        counties = new ArrayList<County>();
                        int count =parser.getAttributeCount();
                        for(int i=0;i<count;i++)
                        {
                            String attName =parser.getAttributeName(i);
                            String attValue = parser.getAttributeValue(i);
                            if("c_id".equals(attName))
                            {
                                city.setId(attValue);
                            }
                        }
                    }
                    else if("cn".equals(tagName))
                    {
                        city.setName(parser.nextText());
                    }
                    else if("d".equals(tagName))
                    {
                        county = new County();
                        int count =parser.getAttributeCount();
                        for(int i=0;i<count;i++)
                        {
                            String attName =parser.getAttributeName(i);
                            String attValue = parser.getAttributeValue(i);
                            if("d_id".equals(attName))
                            {
                                county.setId(attValue);
                            }
                        }
                        county.setName(parser.nextText());
                        counties.add(county);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    tagName =parser.getName();
                    if("c".endsWith(tagName))
                    {
                        city.setCounties(counties);
                        cities.add(city);
                    }
                    else if("p".equals(tagName))
                    {
                        province.setCitys(cities);
                        provinces.add(province);
                    }
                    break;
                default:
                    break;
            }
            event = parser.next();
        }
        return provinces;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值