Android 安卓省、市、区三级连动

这个功能就类似于自己输入自己的所在地,当你选择一个所在地的话,你所在地相对应的地方就能在下一个列表里展示出来,这个功能主要考的事,你对json解析的理解,如果这个会的话,json解析就不在话下了。

既然是省、市、区,所以bean类要这样写,省包含市,市包含区,下面展示一下bean类

import java.util.List;

public class ProivenceBean {
    private String proivenceName;
    private List<CityBean> cityList;
    public String getProivenceName() {
        return proivenceName;
    }
    public void setProivenceName(String proivenceName) {
        this.proivenceName = proivenceName;
    }
    public List<CityBean> getCityList() {
        return cityList;
    }
    public void setCityList(List<CityBean> cityList) {
        this.cityList = cityList;
    }

}

import java.util.List;

public class CityBean {
    private String cityName;
    private List<String> zoneList;
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public List<String> getZoneList() {
        return zoneList;
    }
    public void setZoneList(List<String> zoneList) {
        this.zoneList = zoneList;
    }

}

下面是适配器,这个适配器的区别,就在于,在条目设置当中需要继承自相对应的bean类,因为是包含关系,就两个bean类,区相对应的继承自String就可以的。

import java.util.List;

import cn.bgs.sanjiliandong.R;
import cn.bgs.sanjiliandong.bean.CityBean;
import cn.bgs.sanjiliandong.bean.ProivenceBean;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdaper<T> extends BaseAdapter {
    private Context context;
    private List<T> list;
    public MyAdaper(Context context,List<T> list) {
        this.context=context;
        this.list=list;
    }
    //刷新的方法
    public void refrush(List<T> data){
        this.list=data;

        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        if(list!=null){
            return list.size();
        }
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
            holder=new ViewHolder();
            convertView=View.inflate(context, R.layout.adapter, null);
            holder.tv=(TextView) convertView.findViewById(R.id.tv);
            convertView.setTag(holder);
        }else{
            holder=(ViewHolder) convertView.getTag();
        }
        if(getItem(position) instanceof ProivenceBean){//省级信息
            holder.tv.setText(((ProivenceBean)list.get(position)).getProivenceName());
        }else if(getItem(position) instanceof CityBean){//市
            holder.tv.setText(((CityBean)list.get(position)).getCityName());
        }else if(getItem(position) instanceof String){//区
            holder.tv.setText(((String)list.get(position)));
        }
        return convertView;
    }
    private static class ViewHolder{
        private TextView tv;
    }
}

接下来就是解析了,我在代码里面加了注释,如果你熟悉了其中的解析方式,这个也很简单的

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import cn.bgs.sanjiliandong.adapter.MyAdaper;
import cn.bgs.sanjiliandong.bean.CityBean;
import cn.bgs.sanjiliandong.bean.ProivenceBean;

import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.res.AssetManager;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView provienceTv,cityTv,zoneTv;
    private ListView provienceLv,cityLv,zoneLv;
    private MyAdaper<ProivenceBean> proivenceAdapter;
    private MyAdaper<CityBean> cityAdapter;
    private MyAdaper<String> zoneAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private Handler hand=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //TODO 接受子线程发送的消息
            if(msg.what==1){
                List<ProivenceBean> resultList=(List<ProivenceBean>) msg.obj;
                if(proivenceAdapter!=null){
                    proivenceAdapter.refrush(resultList);
                }else{
                    proivenceAdapter=new MyAdaper<ProivenceBean>(MainActivity.this, resultList);
                    provienceLv.setAdapter(proivenceAdapter);

                }
            }
        }
    };

    private void initView() {
        provienceTv=(TextView) findViewById(R.id.provienceTv);
        cityTv=(TextView) findViewById(R.id.cityTv);
        zoneTv=(TextView) findViewById(R.id.zoneTv);

        provienceLv=(ListView) findViewById(R.id.provienceLv);
        cityLv=(ListView) findViewById(R.id.cityLv);
        zoneLv=(ListView) findViewById(R.id.zoneLv);

        provienceLv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                MyAdaper<ProivenceBean> adapter=(MyAdaper<ProivenceBean>) parent.getAdapter();
                ProivenceBean bean=(ProivenceBean) adapter.getItem(position);
                String name=bean.getProivenceName();
                provienceTv.setText(name);
                if(cityAdapter!=null){
                    cityAdapter.refrush(bean.getCityList());
                }else{
                    cityAdapter=new MyAdaper<CityBean>(MainActivity.this, bean.getCityList());
                    cityLv.setAdapter(cityAdapter);
                }
                if(zoneAdapter!=null){
                    zoneAdapter.refrush(null);
                }
            }

        });
        cityLv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                MyAdaper<CityBean> adapter=(MyAdaper<CityBean>) parent.getAdapter();
                CityBean bean=(CityBean) adapter.getItem(position);
                String name=bean.getCityName();
                cityTv.setText(name);
                if(zoneAdapter!=null){
                    zoneAdapter.refrush(bean.getZoneList());
                }else{
                    zoneAdapter=new MyAdaper<String>(MainActivity.this, bean.getZoneList());
                    zoneLv.setAdapter(zoneAdapter);
                }
            }
        });
        zoneLv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                MyAdaper<String> adaper=(MyAdaper<String>) parent.getAdapter();
                zoneTv.setText((String)adaper.getItem(position));
            }
        });
        initList();
    }



    private void initList() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //关联文件
//              String path=Environment.getExternalStorageDirectory()+"/ssq.txt";
//              File file=new File(path);
                AssetManager manager = getResources().getAssets();
                try {
                    InputStream inputStream = manager.open("ssq.txt");
                    BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
                    StringBuffer sb=new StringBuffer();
                    String line="";
                    while((line=br.readLine())!=null){
                        sb.append(line);
                    }
                    br.close();
                    String result=sb.toString();
                    JSONArray jsonarray=new JSONArray(result);
                    List<ProivenceBean> provienceList=new ArrayList<ProivenceBean>();
                    if(jsonarray!=null){
                        for(int i=0;i<jsonarray.length();i++){
                            JSONObject proivenceObject = jsonarray.getJSONObject(i);
                            ProivenceBean proivencebean=new ProivenceBean();
                            if(proivenceObject.has("name")){
                                proivencebean.setProivenceName(proivenceObject.getString("name"));
                                if(proivenceObject.has("city")){
                                    List<CityBean> cityList=new ArrayList<CityBean>();
                                    JSONArray cityarray = proivenceObject.getJSONArray("city");
                                    if(cityarray!=null){
                                        for(int j=0;j<cityarray.length();j++){
                                            JSONObject cityobObject = cityarray.getJSONObject(j);
                                            CityBean citybean=new CityBean();
                                            if(cityobObject.has("name")){
                                                citybean.setCityName(cityobObject.getString("name"));
                                                if(cityobObject.has("area")){
                                                    List<String> zoneList=new ArrayList<String>();
                                                    JSONArray zonearray = cityobObject.getJSONArray("area");
                                                    if(zonearray!=null){
                                                        for(int k=0;k<zonearray.length();k++){
                                                            String string=(String) zonearray.get(k);
                                                            zoneList.add(string);
                                                        }
                                                    }
                                                    citybean.setZoneList(zoneList);
                                                }

                                            }
                                            cityList.add(citybean);
                                        }
                                    }
                                    proivencebean.setCityList(cityList);
                                }
                            }
                            provienceList.add(proivencebean);
                        }
                        // 发送消息,从子线程发送到主线程
                        Message msg=hand.obtainMessage();
                        msg.what=1;
                        msg.obj=provienceList;
                        hand.sendMessage(msg);
                    }

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }

}

如果你使用我的这个小demo,就会用到一个自己的.txt 文件,你就看我上一个博客,把里面的内容copy进一个.txt 文件里面,然后放在自己的asseset文件夹下面即可

猜你喜欢

转载自blog.csdn.net/nazicsdn/article/details/81009469
今日推荐