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

Posted zhaihaohao1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Android中选择器PickerView(第三方控件)的使用2----省市区选择的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义控件实战——滚动选择器PickerView

谈谈-Android-PickerView系列之介绍与使用

Android PickerView的简单使用

Android PickerView的简单使用

Android PickerView的简单使用

如何根据之前的选择器视图选择更新PickerView 数据