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----省市区选择的主要内容,如果未能解决你的问题,请参考以下文章