Android中选择器PickerView(第三方控件)的使用2----省市区选择

效果图:
这里写图片描述
项目结构:
这里写图片描述
思路:
1)添加依赖
2)在代码中调用,PickerView库分装的很好,底部弹出的选择器,已经封装在库中了,
不需要自己在布局文件中引用了,三级联动也是分装好的,只需要在代码中调用就可以了
3)省市区的数据是一个json字符串,放在main—-assets—-province.json 解析这个json
组装成list,然后调用OptionsPickerBuilder,把数据绑定,把监听写好就行了

具体步骤如下:
1在build.gradle中添加依赖

compile 'com.contrarywind:Android-PickerView:4.1.6'

2添加省市区的json字符串main—-assets—-province.json,由于这个字符串太长,在文章结尾处下载源码中复制
3具体代码MainActivity中,解析数据和显示省市区选择器

package com.zhh.mypickerview;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
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 com.google.gson.reflect.TypeToken;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
//  弹出按钮
    private Button btnDiqu;
//  省
    private List<ShengBean> options1Items = new ArrayList<ShengBean>();
//  市
    private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
//  区
    private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnDiqu = findViewById(R.id.btnDiqu);
        btnDiqu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//              解析数据
                parseData();
//              展示省市区选择器
                showPickerView();
            }
        });
    }

    /**
     * 解析数据并组装成自己想要的list
     */
   private void parseData(){
       String jsonStr = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据
//     数据解析
       Gson gson =new Gson();
       java.lang.reflect.Type type =new TypeToken<List<ShengBean>>(){}.getType();
       List<ShengBean>shengList=gson.fromJson(jsonStr, type);
//     把解析后的数据组装成想要的list
       options1Items = shengList;
//     遍历省
       for(int i = 0; i <shengList.size() ; i++) {
//         存放城市
           ArrayList<String> cityList = new ArrayList<>();
//         存放区
           ArrayList<ArrayList<String>> province_AreaList = new ArrayList<>();
//         遍历市
           for(int c = 0; c <shengList.get(i).city.size() ; c++) {
//        拿到城市名称
           String cityName = shengList.get(i).city.get(c).name;
           cityList.add(cityName);

           ArrayList<String> city_AreaList = new ArrayList<>();//该城市的所有地区列表
               if (shengList.get(i).city.get(c).area == null || shengList.get(i).city.get(c).area.size() == 0) {
                   city_AreaList.add("");
               } else {
                   city_AreaList.addAll(shengList.get(i).city.get(c).area);
               }
               province_AreaList.add(city_AreaList);
           }
           /**
            * 添加城市数据
            */
           options2Items.add(cityList);
           /**
            * 添加地区数据
            */
           options3Items.add(province_AreaList);
       }

   }

    /**
     * 展示选择器
     */
    private void showPickerView() {// 弹出选择器

        OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                //返回的分别是三个级别的选中位置
                String tx = options1Items.get(options1).name +
                        options2Items.get(options1).get(options2) +
                        options3Items.get(options1).get(options2).get(options3);

                Toast.makeText(MainActivity.this, tx, Toast.LENGTH_SHORT).show();
                btnDiqu.setText(tx);
            }
        })

                .setTitleText("城市选择")
                .setDividerColor(Color.BLACK)
                .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
                .setContentTextSize(20)
                .build();

        /*pvOptions.setPicker(options1Items);//一级选择器
        pvOptions.setPicker(options1Items, options2Items);//二级选择器*/
        pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
        pvOptions.show();
    }
}

4数据解析用到的实体类ShengBean

package com.zhh.mypickerview;

import com.contrarywind.interfaces.IPickerViewData;

import java.util.List;

/**
 * Created by 16838 on 2018/8/1.
 */
public class ShengBean implements IPickerViewData {
    public String name;
    public List<Shi> city;
    public static class Shi{
        public String name;
        public List<String>area;

    }
//  这个要返回省的名字
    @Override
    public String getPickerViewText() {
        return this.name;
    }
}

读取json文件的工具类

package com.zhh.mypickerview;

import android.content.Context;
import android.content.res.AssetManager;

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

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

public class GetJsonDataUtil {


    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();
    }
}

5activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zhh.mypickerview.MainActivity"
    android:orientation="vertical"
    >

   <Button
       android:id="@+id/btnDiqu"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="选择省市区"

       />

</LinearLayout>

guthub上官网地址:
https://github.com/Bigkoo/Android-PickerView
源码下载:
https://download.csdn.net/download/zhaihaohao1/10577293

猜你喜欢

转载自blog.csdn.net/zhaihaohao1/article/details/81331954
今日推荐