Android 三级列表

最近项目有用到一个三级列表,本想自己的写,问了下度娘发现已经有大神写好的。所以拿来借此一用了。
为了以后的方便使用就把他封装成一个工具类:

添加依赖:
//三级列表
compile ‘com.contrarywind:Android-PickerView:4.1.5’

  1. 首先我们要创建一个assets(网络获取的话不需要)文件夹
    Android 三级列表_第1张图片

2:我将三级列表的解析,数据源都写在一个公用类里面,用的时候直接调该类:

package util;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Color;
import android.view.View;
import android.widget.Toast;

import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.google.gson.Gson;

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

import bean.JsonBean;
import reapiractivity.ReparidetailActivity;

/**
 * <读取Json文件的工具类>
 *
 */

public class `GetJsonDataUtil` {
    private static ArrayList options1Items = new ArrayList<>();//第一级数据源
    private static ArrayList> options2Items = new ArrayList<>();//第二级数据源
    private static  ArrayList>> options3Items = new ArrayList<>();
    private static String mTx;
    public String getJson(Context context,String fileName) {

        StringBuilder stringBuilder = new StringBuilder();
        try {
            AssetManager assetManager = context.getAssets();
            BufferedReader bf = new BufferedReader(new InputStreamReader(
                    assetManager.open(fileName)));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
    public static ArrayList  parseData(Context context,String result) {//Gson 解析
        ArrayList detail = new ArrayList<>();
        try {
            org.json.JSONArray data = new org.json.JSONArray(result);
            Gson gson = new Gson();
            for (int i = 0; i < data.length(); i++) {
                JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
                detail.add(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return detail;
    }
    public   boolean initJsonData(final Context context) {//解析数据

        /**
         * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
         * 关键逻辑在于循环体
         *
         * */
        String JsonData = new GetJsonDataUtil().getJson(context, "province.json");//获取assets目录下的json文件数据

        ArrayList jsonBean = GetJsonDataUtil.parseData(context,JsonData);//用Gson 转成实体

        /**
         * 添加省份数据
         *
         * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
         * PickerView会通过getPickerViewText方法获取字符串显示出来。
         */
        options1Items = jsonBean;

        for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
            ArrayList CityList = new ArrayList<>();//该省的城市列表(第二级)
            ArrayList> Province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)

            for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
                String CityName = jsonBean.get(i).getCityList().get(c).getName();
                CityList.add(CityName);//添加城市
                ArrayList City_AreaList = new ArrayList<>();//该城市的所有地区列表

                //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
                if (jsonBean.get(i).getCityList().get(c).getArea() == null
                        || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
                    City_AreaList.add("");
                } else {
                    City_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
                }
                Province_AreaList.add(City_AreaList);//添加该省所有地区数据
            }

            /**
             * 添加城市数据
             */
            options2Items.add(CityList);

            /**
             * 添加地区数据
             */
            options3Items.add(Province_AreaList);

        }
        OptionsPickerView pvOptions = new OptionsPickerBuilder(context, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                //返回的分别是三个级别的选中位置
                mTx = options2Items.get(options1).get(options2) +
                        options3Items.get(options1).get(options2).get(options3);
                     GetJsonDataUtil.this. onOptionsSelect(mTx);
            }
        })
                .setTitleText("选择区域")
                .setDividerColor(Color.BLACK)
                .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
                .setContentTextSize(20)
                .build();
        pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
        pvOptions.show();
        return true;


    }

    public void onOptionsSelect(String data) {
    }

}

3:在你需要的地方调用该类抛出的方法:

 GetJsonDataUtil getJsonDataUtil = new GetJsonDataUtil(){
                    @Override
                    public void onOptionsSelect(String data) {
                        mTextzhan.setText(data);//选中后回传的值
                    }
                };

你可能感兴趣的:(Android)