Bigkoo / Bigkoo/Android-PickerView

kotlin下获取地址的代码演示

Open
#830 0 comments 4 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.