不废话,需求:做一个好看的省,市,区三级联动的选择器,怎么办?

需要WheelView基础控件自行扩展实现逻辑,可直接添加基础控件库,Gradle 依赖:

compile 'com.contrarywind:wheelview:4.0.9'

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"><includelayout="@layout/include_pickerview_topbar"android:layout_width="match_parent"android:layout_height="@dimen/pickerview_topbar_height" /><LinearLayoutandroid:id="@+id/optionspicker"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:orientation="horizontal"><com.contrarywind.view.WheelViewandroid:id="@+id/options1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1" /><com.contrarywind.view.WheelViewandroid:id="@+id/options2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1" /><com.contrarywind.view.WheelViewandroid:id="@+id/options3"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1" /></LinearLayout></LinearLayout>

初始化PopWindow:

  private void initPopwindow() {popupWindow = new PopupWindow(this);LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);View mMenuView = inflater.inflate(R.layout.my_pickerview_options, null);Button btnCancel, btnSubmit;options1 = mMenuView.findViewById(R.id.options1);options2 = mMenuView.findViewById(R.id.options2);options3 = mMenuView.findViewById(R.id.options3);btnCancel = mMenuView.findViewById(R.id.btnCancel);btnSubmit = mMenuView.findViewById(R.id.btnSubmit);btnCancel.setTextColor(ContextCompat.getColor(RegisterShopActivity.this, R.color.colorCancel));btnSubmit.setTextColor(ContextCompat.getColor(RegisterShopActivity.this, R.color.colorSub));btnSubmit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String opt1tx = mOptionsItems1.size() > 0 ?mOptionsItems1.get(options1.getCurrentItem()) : "";String opt2tx = mOptionsItems2.size() > 0 ?mOptionsItems2.get(options2.getCurrentItem()) : "";String opt3tx = mOptionsItems3.size() > 0 ?mOptionsItems3.get(options3.getCurrentItem()) : "";String tx = opt1tx + opt2tx + opt3tx;tvShopAddress.setText(tx);tvShopAddress.setTextColor(ContextCompat.getColor(RegisterShopActivity.this, R.color.colorText));isSelectAdress = true;popupWindow.dismiss();}});btnCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {popupWindow.dismiss();}});options1.setCyclic(false);options2.setCyclic(false);options3.setCyclic(false);options1.setDividerColor(Color.BLACK);options2.setDividerColor(Color.BLACK);options3.setDividerColor(Color.BLACK);
//        options1.setIsOptions(true);
//        options2.setIsOptions(true);
//        options3.setIsOptions(true);options1.setAdapter(new ArrayWheelAdapter(mOptionsItems1));options2.setAdapter(new ArrayWheelAdapter(mOptionsItems2));options3.setAdapter(new ArrayWheelAdapter(mOptionsItems3));options1.setTextSize(20);options2.setTextSize(20);options3.setTextSize(20);options1.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(int index) {
//                Toast.makeText(RegisterShopActivity.this, "" + mOptionsItems1.get(index), Toast.LENGTH_SHORT).show();int province_id = province.get(index).getProvince_id();getCity(province_id + "");}});options2.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(int index) {
//                Toast.makeText(RegisterShopActivity.this, "" + mOptionsItems2.get(index), Toast.LENGTH_SHORT).show();long city_id = city.get(index).getCity_id();getCounty(city_id + "");}});popupWindow.setContentView(mMenuView);popupWindow.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);ColorDrawable dw = new ColorDrawable(0x000000);popupWindow.setBackgroundDrawable(dw);popupWindow.setFocusable(true);popupWindow.setOutsideTouchable(true);popupWindow.setAnimationStyle(R.style.picker_view_slide_anim);// 设置popupWindow取消的点击事件,即popupWindow消失后,屏幕的透明度,全透明,就回复原状态popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {WindowUtil.backgroundAlpha(RegisterShopActivity.this, 1f);}});}

显示PopWindow:

  private void showPopwindow() {popupWindow.showAtLocation(rlBankInfo,Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);WindowUtil.backgroundAlpha(this, 0.4f);llDetailAddress.setVisibility(View.VISIBLE);}

设置数据:

                                activity.options1.setAdapter(new ArrayWheelAdapter(activity.mOptionsItems1));activity.options1.setCurrentItem(0);

这里我的省,市,区的数据都是服务器请求获取的。获取省数据时,需要获取市的数据。获取市的数据后,需要获取区的数据。每次滑动省,市时,需要获取数据。

Android 省,市,区选择权相关推荐

  1. ReactNative中国省-市-区WheelPicker组件

    github地址 兼容IOS和安卓,中国省-市-区WheelPicker选择器的RN组件. propTypes isVisible: PropTypes.bool, selectedProvince: ...

  2. android应用市场点击下载APK安装详解

    Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...

  3. 国,省,市,区(县)(四级联动)

    国,省,市,区(县)(四级联动) 一, 技术栈:Vue + Quasar + Vuelidate + axios 二, 具体代码(表单验证规则Vuelidate上篇文章已经写过了,这里就不多做介绍咯) ...

  4. 【Uni-App】用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动确认回显

    目录 一:准备工作 二:json文件数据 例1 例2 三:先做个按钮做弹窗显示 四:使用组件 五:用到的变量 六:初始化数据 七:数据变更时的方法 八:点击确认时的方法 九:数据的回填 这是选中效果 ...

  5. uniapp 用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动

    组件的引入就不多赘述了 直接看使用方法 地址我是引入的json文件数据结构大概是这个样子 例1 例2 1,先做个按钮做弹窗显示 <u-cell :border="true" ...

  6. android 应用区高度,Android创建显示区高度可以调整的ScrollView

    导言:我们在用到ScrollView时,有时候需要它的显示区高度可以调整,比如一段话放到ScrollView中,当这段话只有一行时,我们设置ScrollView的高度为20:有两行时,我们设置Scro ...

  7. 原生JS写三级联动 --省--市--区

    效果如下: css代码 <style>select{width: 100px;height: 30px;} </style> html代码 <div id="b ...

  8. 根据经纬度获取该地址所属省/市/区/乡镇/街道名称

    1.这里演示的代码目的是为了通过经纬度,获取该地址所属乡镇名称.区名.全名. 2.使用了百度地图API接口: 详情:http://lbsyun.baidu.com/index.php?title=we ...

  9. 收件地址解析成 省+市+区+详细地址的形式

    项目中的源代码在我的GitHub:https://github.com/weitw/address-analyzer 先看效果: 如上图,address数输入的地址,Address对象是解析后的地址. ...

最新文章

  1. 山水风景照数据集_空寂灵动 -- 李良山水画
  2. Exynos4412裸机开发 —— 看门狗定时器
  3. 模拟新浪新闻在线聊天功能
  4. σ 代数与测度(measures)
  5. java拦截器handler_java拦截器HandlerInterceptor的preHandle、postHandle与afterCompletion三个方法...
  6. 六种电平转换的优缺点
  7. 微信小游戏开发之使用云开发作为后台服务
  8. 人人都在推销(销售永不为“奴”)
  9. 口算系统c语言,一二年级口算题出题系统
  10. 计算机-磁盘管理不能删除,关于win10系统磁盘管理磁盘右键菜单中只有“帮助”删除方法...
  11. 6个超实用网站,让你工作时长减半。
  12. EndNote自动生成毕业论文GB7714引文格式教程
  13. 郑渊洁:一个著作等身的文盲
  14. 苏州公交实时查询api 根据线路编码查询详细信息
  15. Mac新手操作指南(六)
  16. 【Python】二维码生成与读取
  17. windows2008服务器IIS7下php程序伪静态处理 猫叔
  18. modelsim-win64-10.1c-se.exe安装备忘
  19. vue项目使用乐橙云播放 轻应用直播SDK imouplayer.js
  20. ABAQUS隧道模拟,新建盾构隧道下穿既有隧道。 包含盾壳,注浆层,注浆压力,衬砌等

热门文章

  1. linux系统定时任务crond入门
  2. 提高代码质量 CheckStyle FindBugs PMD
  3. 不要在viewWillDisappear:方法中移除通知
  4. LeetCode Combination Sum
  5. JavaMail发送和接收邮件
  6. R可视化lend_club 全球最大的P2P平台数据75W条
  7. zk reconnect
  8. react中webpack.config.js配置lessless-loader less
  9. 每一个工程师都要学的安全测试,老板再也不用担心服务器被黑
  10. mybatis$和#的区别