AndroidCityPicker仿IOS選擇效果
阿新 • • 發佈:2019-02-08
最近的一個專案因為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);
}
});
對這個有興趣的朋友把原始碼下載下來看一下。
站在巨人的肩膀上,我們才能看得更遠