申请会员ID:zylvip
申 请 I D:zylvip个人邮箱:zylvip@163.com
原创技术文章:转自本人博客:https://blog.csdn.net/zylvip
# 使用Android-PickerView选择器实现三级选择器
## 实现效果
![地址三级联动](https://img-blog.csdnimg.cn/20181117030512773.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p5bHZpcA==,size_16,color_FFFFFF,t_70)
1. ## 导入[依赖](https://github.com/Bigkoo/Android-PickerView)
```
api 'com.contrarywind:Android-PickerView:4.1.6'
```
2. ## 导入最新[地址数据](https://github.com/modood/Administrative-divisions-of-China)Json文件到与assets目录(若没有assets则新建,目录与res同级)
3. ## 创建实体类(用来Json2Bean)
```
import com.contrarywind.interfaces.IPickerViewData
//存放省以及所属市
data class PCACodePO(
val code: String,
val name: String,
val children: MutableList<CCodePO>
)
//存放市以及所属辖区
data class CCodePO(
val code: String,
val name: String,
val children: MutableList<AddressInfoPO>
)
//用于显示PickerView显示
data class AddressInfoPO(
//地区编码
val code: String,
//地区名称
val name: String
) : IPickerViewData {
override fun getPickerViewText(): String = name
}
```
4. ## 编写获取json文件内容工具类
```
import android.content.Context
import android.content.res.AssetManager
import java.io.*
object FileUtil{
fun getAssetsFileText(context: Context,fileName:String):String{
val strBuilder=StringBuilder()
val assetManager=context.assets
val bf =BufferedReader(InputStreamReader(assetManager.open(fileName)))
bf.use { strBuilder.append(it.readLine())}
bf.close()
return strBuilder.toString()
}
}
```
5. ## 显示PickerView
```
/**
* 显示地址选择
*/
override fun showAddressPicker(provinceItems: MutableList<AddressInfoPO>,
cityItems: MutableList<MutableList<AddressInfoPO>>,
areaItems: MutableList<MutableList<MutableList<AddressInfoPO>>>) {
val addressPv =
OptionsPickerBuilder(this, OnOptionsSelectListener { options1, options2, options3, v ->
//省份
provinceItems
//城市
cityItems
//辖区
areaItems
})
.setTitleText(pickerEnum.title)
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build<AddressInfoPO>()
addressPv.setPicker(provinceItems, cityItems, areaItems)
addressPv.show()
}
```
6. ## 初始化三级联动所需数据
```
/**
* 初始化地址数据
*/
fun initAddressPicker() {
val provinceItems = mutableListOf<AddressInfoPO>()
val cityItems = mutableListOf<MutableList<AddressInfoPO>>()
val areaItems = mutableListOf<MutableList<MutableList<AddressInfoPO>>>()
//Json2Bean
val pcaCodeList = Gson().fromJson<MutableList<PCACodePO>>(FileUtil.getAssetsFileText(mApplication, "pcacode.json"), object : TypeToken<MutableList<PCACodePO>>() {}.type)
//遍历省
pcaCodeList.forEach {pcaCode ->
//存放省内市区
val cityList= mutableListOf<AddressInfoPO>()
//存放省内所有辖区
val areaList= mutableListOf<MutableList<AddressInfoPO>>()
//遍历省内市区
pcaCode.children.forEach { cCode ->
//添加省内市区
cityList.add(AddressInfoPO(cCode.code,cCode.name))
//存放市内辖区
val areas= mutableListOf<AddressInfoPO>()
//添加市内辖区
cCode.children.forEach {addressInfo->
areas.add(addressInfo)
}
areaList.add(areas)
}
//添加省份
provinceItems.add(AddressInfoPO(pcaCode.code,pcaCode.name))
//添加市区
cityItems.add(cityList)
//添加辖区
areaItems.add(areaList)
}
//显示选择器
mRootView.showAddressPicker(provinceItems,cityItems,areaItems)
}
``` 抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页:
[1]