package com.igo.user.dialog import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.DialogFragment import cn.sinata.xldutils.activity.BaseActivity import cn.sinata.xldutils.view.WheelView import com.igo.user.R import com.igo.user.network.HttpManager import com.igo.user.network.entity.City import com.igo.user.network.request import org.jetbrains.anko.matchParent import org.jetbrains.anko.support.v4.find import org.jetbrains.anko.wrapContent class RegionDialog : DialogFragment() { private val province by lazy { arguments?.getSerializable("province") as ArrayList } private val city= arrayListOf() private var isFirst = true //true:第一次显示,需要回显选中的index override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return inflater.inflate(R.layout.dialog_region, container, false) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(STYLE_NO_FRAME, R.style.Dialog) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) dialog?.window?.setLayout(matchParent, wrapContent) dialog?.window?.setGravity(Gravity.BOTTOM) dialog?.setCanceledOnTouchOutside(true) } private val wv_1 by lazy { find(R.id.wv_1) } private val wv_2 by lazy { find(R.id.wv_2) } private val wv_3 by lazy { find(R.id.wv_3) } private val tv_cancel by lazy { find(R.id.tv_cancel) } private val tv_sure by lazy { find(R.id.tv_sure) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) wv_1.setItems(province.map { it.name }) wv_1.setSeletion(arguments?.getInt("provinceIndex")?:0) getRegion() wv_1.setOnWheelViewListener { _, _ -> getRegion() } wv_2.setOnWheelViewListener { _, _ -> getRegion(false) } tv_cancel.setOnClickListener { dismiss() } tv_sure.setOnClickListener { callback?.onOk(wv_1.seletedItem+wv_2.seletedItem+wv_3.seletedItem,wv_1.seletedIndex,wv_2.seletedIndex,wv_3.seletedIndex) dismiss() } } /** * @param isCity true:城市 false:地区 */ private fun getRegion(isCity:Boolean = true){ if ((!isCity&&city.isEmpty())||!isAdded) return HttpManager.queryRegions(if (isCity) province[wv_1.seletedIndex].id else city[wv_2.seletedIndex].id).request(activity as BaseActivity){_,data-> data?.apply { if (isCity){ city.clear() city.addAll(this) wv_2?.setItems(city.map { it.name }) if (isFirst) wv_2?.setSeletion(arguments?.getInt("cityIndex")?:0) else wv_2?.setSeletion(0) if (city.isNotEmpty()) getRegion(false) else{ wv_3?.setItems(arrayListOf()) wv_3?.setSeletion(0) } }else{ wv_3?.setItems(map{it.name}) if (isFirst) wv_3?.setSeletion(arguments?.getInt("regionIndex")?:0) else wv_3?.setSeletion(0) } } } } interface OnOkClick{ fun onOk(region:String,provinceIndex:Int,cityIndex:Int,regionIndex:Int) } private var callback: OnOkClick? = null fun setCallback(callback: OnOkClick) { this.callback = callback } }