Bigkoo / Bigkoo/Android-PickerView
kotlin下获取地址的代码演示
- Dominant language
- Java
- Stars
- 13.4k
- Forks
- 3.4k
- PR merge metrics
- No merged PRs in 30d
Description
```
/*---------------------地址----------------------*/
// 点击事件
fun addressClick(view: View) {
if (isLoaded) {
showPickerView()
} else {
mHandler.sendEmptyMessage(MSG_LOAD_DATA)
}
}
var options1Items: MutableList = ArrayList()
var options2Items: MutableList> = ArrayList()
var options3Items: MutableList>> = ArrayList()
private var thread: Thread? = null
private val MSG_LOAD_DATA = 0x0001
private val MSG_LOAD_SUCCESS = 0x0002
private val MSG_LOAD_FAILED = 0x0003
private var isLoaded = false
@SuppressLint("HandlerLeak")
private val mHandler = object : Handler() {
override fun handleMessage(msg: Message) {
when (msg.what) {
MSG_LOAD_DATA -> if (thread == null) {//如果已创建就不再重新创建子线程了
thread = Thread(Runnable {
// 子线程中解析省市区数据
initAddressData()
})
thread?.start()
}
MSG_LOAD_SUCCESS -> {
isLoaded = true
showPickerView()
}
MSG_LOAD_FAILED -> showShortText("获取城市列表失败")
}
}
}
/**
* 初始化地址数据
*/
fun initAddressData() {
// 初始化地址数据
val json = GetJsonDataUtils().getJson(mActivity, "province.json")
val jsonArray = JSONArray(json)
val jsonBeanList = ArrayList()
// 添加省
for (i in 0 until jsonArray.length()) {
val jsonBean = Gson().fromJson(jsonArray.optJSONObject(i).toString(), JsonBean::class.java)
options1Items.add(jsonBean.name)
jsonBeanList.add(jsonBean)
}
// 遍历市、县
for (i in 0 until jsonBeanList.size) {
val cityList = ArrayList()
val provinceAreaList = ArrayList>()
// 遍历省下的市
for (j in 0 until jsonBeanList[i].cityList.size) {
cityList.add(jsonBeanList[i].cityList[j].name)
val areaList = ArrayList()
areaList.addAll(jsonBeanList[i].cityList[j].area)
provinceAreaList.add(areaList)
}
// 添加省下所有的市
options2Items.add(cityList)
// 添加省下所有的县
options3Items.add(provinceAreaList)
}
mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS)
}
/**
* 显示地址选择弹窗
*/
fun showPickerView() {
val pickerView = OptionsPickerBuilder(mActivity, OnOptionsSelectListener { options1, options2, options3, v ->
//返回的分别是三个级别的选中位置
val opt1tx = if (options1Items.size > 0)
options1Items[options1]
else
""
val opt2tx = if (options2Items.size > 0 && options2Items[options1].size > 0)
options2Items[options1][options2]
else
""
val opt3tx = if (options2Items.size > 0
&& options3Items[options1].size > 0
&& options3Items[options1][options2].size > 0)
options3Items[options1][options2][options3]
else
""
val tx = opt1tx + opt2tx + opt3tx
tv_address.setText(tx)
}).build()
pickerView.setPicker(options1Items, options2Items, options3Items)
pickerView.show()
}
override fun onDestroy() {
super.onDestroy()
mHandler.removeCallbacksAndMessages(null)
}
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.