使用Android-PickerView选择器实现地址选择器
实现效果
```
api 'com.contrarywind:Android-PickerView:4.1.6'
```
导入最新地址数据Json文件到与assets目录(若没有assets则新建,目录与res同级)
创建实体类(用来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
}
```
编写获取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()
}
}
```
显示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[options1]
//城市
cityItems[options1][options2]
//辖区
areaItems[options1][options2][options3]
})
.setTitleText(pickerEnum.title)
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build<AddressInfoPO>()
addressPv.setPicker(provinceItems, cityItems, areaItems)
addressPv.show()
}
```
初始化三级联动所需数据
```
/**
* 初始化地址数据
*/
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)
}
```