AndroidCityPicker仿IOS选择效果
近期的一个项目由于android端与IOS端须要同步,所以在城市选择器这里做了一个相似IOS的CityPicker控件,当然由于本人水平问题显示效果比IOS上面还是有一定差距的。OK先让大家看下效果。
由于项目中是一个两级连选,所以这个DEMO仅仅用也就没有放上县级的数据。假设有须要实现三级连选的朋友。能够參照代码加上即可了。
内部使用的WheelView控件来自https://github.com/wangjiegulu/WheelView,在他的基础上进行和一些改动了备注,使他更适合于进行3级的城市连选,须要的朋友能够下载下来看一下。 
附上部分代码片段。
数据的获取,全部的数据来自于CityManage对象。
public class CityManage {
    private SQLiteDatabase database;
    public CityManage(Context context){
        database = CityDatabase.openDatabase(context);
    }
    /**
     * 获取全部的省市名称
     */
    public List<String> getAllNames(){
        List<String> result = new ArrayList<>();
        Cursor cursor = database.query("region",new String[]{"name"},null,null,null,null,null);
        while (cursor.moveToNext()){
                result.add(cursor.getString(0));
        }
        return result;
    }
    /**
     * 获取全部省的名称
     */
    public List<String> getProvinceNames(){
        List<String> result = new ArrayList<>();
        Cursor cursor = database.query("region",new String[]{"name"},"parent_id = 1",null,null,null,null,null);
        while (cursor.moveToNext()){
            result.add(cursor.getString(0));
        }
        return result;
    }
    /**
     * 依据省市的ID获取省市的名称
     */
    public String getProvinceNameFromProvinceId(String provinceId){
        String result = "找不到桑";
        Cursor cursor = database.query("region",new String[]{"name"},"region_id = ?
",new String[]{provinceId},null,null,null,null);
        while (cursor.moveToNext()){
            result = cursor.getString(0);
        }
        return result;
    }
    /**
     * 依据省市的名称获取省市的ID
     */
    public String getProvinceIdFromProvinceName(String provinceName){
        String result = "找不到桑";
        Cursor cursor = database.query("region",new String[]{"region_id"},"name = ?",new String[]{provinceName},null,null,null,null);
        while (cursor.moveToNext()){
            result = cursor.getString(0);
        }
        return result;
    }
    /**
     * 依据省的ID获取它包括的全部市的名称
     */
    public List<String> getCityNameFromProvinceId(String provinceId){
        List<String> result = new ArrayList<>();
        Cursor cursor = database.query("region",new String[]{"name"},"parent_id = ?",new String[]{provinceId},null,null,null,null);
        while (cursor.moveToNext()){
            result.add(cursor.getString(0));
        }
        return result;
    }
    /**
     * 依据省的ID获取它包括的全部市的模型
     */
    public List<CityModel> getCityModelFromProvinceId(String provinceId){
        List<CityModel> result = new ArrayList<>();
        Cursor cursor = database.query("region",null,"parent_id = ?",new String[]{provinceId},null,null,null,null);
        while (cursor.moveToNext()){
            CityModel cityModel = new CityModel();
            //城市ID
            int indexId = cursor.getColumnIndex("region_id");
            cityModel.setCityId(cursor.getString(indexId));
            //城市名
            int indexCityName = cursor.getColumnIndex("name");
            cityModel.setCityName(cursor.getString(indexCityName));
            //所属省ID
            int indexProvinceId = cursor.getColumnIndex("parent_id");
            cityModel.setProvinceId(cursor.getString(indexProvinceId));
            //所属省名称
            cityModel.setProvinceName(getProvinceNameFromProvinceId(cityModel.getProvinceId()));
            result.add(cityModel);
        }
        return result;
    }
    /**
     * 依据省市的ID获取省市的模型
     */
    public CityModel getCityModelFormCityId(String cityId){
        CityModel result = new CityModel();
        Cursor cursor = database.query("region",null,"region_id = ?
",new String[]{cityId},null,null,null,null);
        while (cursor.moveToNext()){
            //城市ID
            int indexId = cursor.getColumnIndex("region_id");
            result.setCityId(cursor.getString(indexId));
            //城市名
            int indexCityName = cursor.getColumnIndex("name");
            result.setCityName(cursor.getString(indexCityName));
            //所属省ID
            int indexProvinceId = cursor.getColumnIndex("parent_id");
            result.setProvinceId(cursor.getString(indexProvinceId));
            //所属省名称
            result.setProvinceName(getProvinceNameFromProvinceId(result.getProvinceId()));
        }
        return result;
    }
    /**
     * 依据省市的名称获取省市的模型
     */
    public CityModel getCityModelFormCityName(String cityName){
        CityModel result = new CityModel();
        Cursor cursor = database.query("region",null,"name = ?",new String[]{cityName},null,null,null,null);
        while (cursor.moveToNext()){
            //城市ID
            int indexId = cursor.getColumnIndex("region_id");
            result.setCityId(cursor.getString(indexId));
            //城市名
            int indexCityName = cursor.getColumnIndex("name");
            result.setCityName(cursor.getString(indexCityName));
            //所属省ID
            int indexProvinceId = cursor.getColumnIndex("parent_id");
            result.setProvinceId(cursor.getString(indexProvinceId));
            //所属省名称
            result.setProvinceName(getProvinceNameFromProvinceId(result.getProvinceId()));
        }
        return result;
    }
}连选关键
 wvProvince.setOnWheelViewListener(new WheelView.OnWheelViewListener(){
            @Override
            public void onSelected(int selectedIndex, String item) {
                super.onSelected(selectedIndex, item);
                //又一次初始化城市数据
                cityList = cityManage.getCityNameFromProvinceId(cityManage.getProvinceIdFromProvinceName(item));
                //替换显示数据
                wvCity.replace(cityList);
                wvCity.setSeletion(0);
            }
        });对这个有兴趣的朋友把源代码下载下来看一下。
源代码下载地址: http://download.csdn.net/detail/u011068996/8983575
站在巨人的肩膀上,我们才干看得更远
AndroidCityPicker仿IOS选择效果的更多相关文章
- Android仿IOS回弹效果  ScrollView回弹 总结
		Android仿IOS回弹效果 ScrollView回弹 总结 应项目中的需求 须要仿IOS 下拉回弹的效果 , 我在网上搜了非常多 大多数都是拿scrollview 改吧改吧 试了一些 发现总 ... 
- Android 实现高仿iOS桌面效果之可拖动的GridView(上)
		转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40074663,作者:skay 最近项目中遇到一个LIstview的拖动效 ... 
- Android-PickerView【仿iOS的PickerView控件,并封装了时间选择和选项选择这两种选择器】使用
		版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文主要演示Android-PickerView的选项选择器.时间选择器的简单运用.由于每一个版本略有不用,所以实际使用方式以git ... 
- jquery仿淘宝规格颜色选择效果
		jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ... 
- 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现
		前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ... 
- iOS仿支付宝首页效果
		代码地址如下:http://www.demodashi.com/demo/12776.html 首先看一下效果 状态栏红色是因为使用手机录屏的原因. 1.问题分析 1.导航栏A有两组控件,随着tabl ... 
- 在uwp仿IOS的页面切换效果
		有时候我们需要编写一些迎合IOS用户使用习惯的uwp应用,我在这里整理一下仿IOS页面切换效果的代码. 先分析IOS的页面切换.用户使用左右滑动方式进行前进和后退,播放类似于FlipView的切换动画 ... 
- 自己定义控件:onDraw 方法实现仿 iOS 的开关效果
		概述 本文主要解说怎样在 Android 下实现高仿 iOS 的开关按钮,并不是是在 Android 自带的 ToggleButton 上改动,而是使用 API 提供的 onDraw.onMeasur ... 
- uni-app自定义Modal弹窗组件|仿ios、微信弹窗效果
		介绍 uniapp自定义弹窗组件uniPop,基于uni-app开发的自定义模态弹窗|msg信息框|alert对话框|confirm确认框|toast弱提示框 支持多种动画效果.多弹窗类型ios/an ... 
随机推荐
- 2017年 湘潭邀请赛(湖南)or 江苏省赛
			这套题是叉姐出的,好难啊,先扫一遍好像没有会做的题了,仔细一想好像D最容易哎 Super Resolution Accepted : 112 Submit : 178 Time Limit : 1 ... 
- HDU-4825 Xor Sum,字典树好题!
			Xor Sum 一遍A了之后大呼一声好(keng)题!debug了两小时~~~~百度之星资格赛,可以. 题意:给你一个n个元素的数组,m次查询,每次输入一个数k要求从数组中找到一个数与k异或值最大,输 ... 
- 【Luogu】P2827蚯蚓(堆转队列)
			按照国际惯例先发题目链接 woc从4月就开始做这sb题.最开始30分升到65分不管了,直到最近几天升到85分,再到今天AC.激动的心情自然是那些一遍就A或者一小时以内就A的神犇难以想象的. 下面说说 ... 
- HackerRank# Hexagonal Grid
			原题地址 铺瓷砖的变种,做法也是类似 假设地板长下面这样,灰色的是无法填充的空洞,初始时可以把N块之外的地板填充成灰色的,便于边界处理 假设现在从后向前已经处理完了一部分,绿色的砖块代表已经遍历过了, ... 
- 算法总结——主席树(poj2104)
			题目: Description You are working for Macrohard company in data structures department. After failing y ... 
- [USACO08DEC]Trick or Treat on the Farm (拓扑排序,DP)
			题目描述 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N个牛棚里转 悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大,所以约翰要想尽法子让奶牛们得到快乐. ... 
- Mountaineers
			Mountaineers 时间限制: 3 Sec 内存限制: 128 MB 题目描述 The Chilean Andes have become increasingly popular as a ... 
- go初识
			for循环 ; i < ; i++ { fmt.Println(i*i) } ls := "agd" for _, arg := range ls{ fmt.Println( ... 
- ORA-01033: ORACLE initialization or shutdown in progress问题
			这是Oracle12c中笔者遇到的一个错误提示:ORA-01033: ORACLE initialization or shutdown in progress 错误的中文意思是:Oracle初始化未 ... 
- ubuntu远程桌面设置
			一.服务器端电脑设置: 1.在搜索端搜索desktop sharing,然后设置后退出 二.客户端电脑设置: 1.在搜索端搜索remmina remote desktop client 2.如图设置: ... 
