AndroidCityPicker仿IOS選擇效果

來源:互聯網
上載者:User

標籤:blog   get   word   i++   包括   水平   img   data   選取器   

近期的一個項目由於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選擇效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.