Android-省市区三级联动
来源:互联网 发布:linux 数据库 编辑:程序博客网 时间:2024/05/22 00:28
省市区三级联动
下载地址:https://code.google.com/p/android-wheel/自备梯子
- 效果图
如果想更改样式需要更改源码
单级滚动
把下载好的做为module导入项目,并添加依赖
这样就可以像使用普通控件一样使用了
<kankan.wheel.widget.WheelView android:id="@+id/wheelviewTimer" android:layout_width="match_parent" android:layout_height="wrap_content" />
Activty
mWheelViewTimer = (WheelView) findViewById(R.id.wheelviewTimer); for(int i = 0; i <24 ; i++) { mDatas.add(i+""); } //设置可以见的条目数量, 上中下 mWheelViewTimer.setVisibleItems(5); //设置适配器 mTimerAdapter = new TimerAdapter(this,mDatas); mWheelViewTimer.setViewAdapter(mTimerAdapter); //放在最后面 设置当前显示的 mWheelViewTimer.setCurrentItem(5);
适配器
感觉和ListView有没有一点像呢,都是要设置适配器
public class TimerAdapter extends AbstractWheelTextAdapter { List<String> mDatas; Context mContext; public TimerAdapter(Context context, List<String> datas) { super(context, R.layout.item_time, NO_RESOURCE); mContext = context; mDatas = datas; setItemTextResource(R.id.time); } @Override protected CharSequence getItemText(int index) { return mDatas.get(index); } @Override public int getItemsCount() { return mDatas.size(); } @Override public View getItem(int index, View convertView, ViewGroup parent) { View view = super.getItem(index, convertView, parent); return view; }
这样就完成了,一个滚动
三级联动
看了一级的,三级的说白了就是3个这个控件
布局
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <kankan.wheel.widget.WheelView android:id="@+id/province" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <kankan.wheel.widget.WheelView android:id="@+id/city" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <kankan.wheel.widget.WheelView android:id="@+id/area" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout>
适配器和上面一样
public class AddressTextAdapter extends AbstractWheelTextAdapter { List<String> mDatas; Context mContext; public AddressTextAdapter(Context context, List<String> datas) { super(context, R.layout.item_address,NO_RESOURCE); mContext = context; mDatas=datas; //设置资源要显示在那个控件上 setItemTextResource(R.id.tempValue); } @Override protected CharSequence getItemText(int index) { return mDatas.get(index); } @Override public int getItemsCount() { return mDatas.size(); } @Override public View getItem(int index, View convertView, ViewGroup parent) { View view = super.getItem(index,convertView,parent); return view; } public String getName(int index){ return mDatas.get(index); }
Activity初始化数据
- 找到3个控件
mProvince = (WheelView) findViewById(R.id.province); mCity = (WheelView) findViewById(city); mArea = (WheelView) findViewById(R.id.area);
- 初始化数据
//读取文件 String str = FileUtils.readAssetsFile(this, "china-city-area-zip.min.json"); Log.d("vivi", "initData: " + str); //转化为对象集合 List<RegionJson> datas = JSON.parseArray(str, RegionJson.class);
这里的数据放在Assets目录下的json文件,读取文件,解析就OK,数据在最下面可以找到
* 分类数据
for(RegionJson data : datas) { //省 mProvinceList.add(data.name); List<String> mCitysList = new ArrayList<>(); for(RegionJson.ChildEntity city : data.child) { //市 mCitysList.add(city.name); List<String> mAreaList = new ArrayList<>(); for(RegionJson.ChildEntity.ChildEntity2 area : city.child) { //区 mAreaList.add(area.name); } //市-区对该 mAreaDatasMap.put(city.name,mAreaList); } //省支市对应 mCitisDatasMap.put(data.name,mCitysList); }
- 为三个控件设置适配器
/** * 省 */ mProvince.setVisibleItems(5); mProviceAdapter = new AddressTextAdapter(this, mProvinceList); mProvince.setViewAdapter(mProviceAdapter); mProvince.setCurrentItem(0); /** * 市 */ mCity.setVisibleItems(5); mCityAdapter = new AddressTextAdapter(this, mCitisDatasMap.get(mProvinceList.get(0))); mCity.setViewAdapter(mCityAdapter); mCity.setCurrentItem(0); /** * 地区 */ mArea.setVisibleItems(5); mAreaAdapter = new AddressTextAdapter(this, mAreaDatasMap.get(mCitisDatasMap.get(mProvinceList.get(0)).get(0))); mArea.setViewAdapter(mAreaAdapter); mArea.setCurrentItem(0);
设置监听滚动完成里切换
private void initScrllListener() { /** * 省滚动完成时切换 城市与地区 */ mProvince.addScrollingListener(new OnWheelScrollListener() { @Override public void onScrollingStarted(WheelView wheel) { //标记位-开始滚动 proviceScrolling =true; } @Override public void onScrollingFinished(WheelView wheel) { proviceScrolling =false; //省滚动完成后切换市 updateCities(mCity,mCitisDatasMap.get(mProviceAdapter.getName(mProvince.getCurrentItem()))); //更新地区 updateArea(mArea,mAreaDatasMap.get(mCityAdapter.getName(mCity.getCurrentItem()))); } }); /** * 市滚动 完成时切换地区 */ mCity.addScrollingListener(new OnWheelScrollListener() { @Override public void onScrollingStarted(WheelView wheel) { //标记位-开始滚动 cityScrolling=true; } @Override public void onScrollingFinished(WheelView wheel) { cityScrolling =false; //市滚动完成后切换 updateArea(mArea,mAreaDatasMap.get(mCityAdapter.getName(mCity.getCurrentItem()))); } }); }
这样就基本完成了
完善滚动中时也可以切换
/** * 省滚动中切换市 */ mProvince.addChangingListener(new OnWheelChangedListener() { @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { //省在滚动 if(proviceScrolling){ //更新城市 updateCities(mCity,mCitisDatasMap.get(mProviceAdapter.getName(newValue))); //更新地区 updateArea(mArea,mAreaDatasMap.get(mCityAdapter.getName(mCity.getCurrentItem()))); } } });
mCity.addChangingListener(new OnWheelChangedListener() { @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { if(cityScrolling){ updateArea(mArea,mAreaDatasMap.get(mCityAdapter.getName(newValue))); } } });
更新数据的2个方法
/** * 切换城市 */ private void updateCities(WheelView city, List<String> cities) { mCityAdapter = new AddressTextAdapter(this,cities); city.setViewAdapter(mCityAdapter); city.setCurrentItem(0); }---------- private void updateArea(WheelView area,List<String> areas){ mAreaAdapter= new AddressTextAdapter(this,areas); area.setViewAdapter(mAreaAdapter); area.setCurrentItem(0); }
源码:https://github.com/ln0491/WheelDemo
0 0
- Android 省市区三级联动
- android 省市区三级联动
- Android-省市区三级联动
- Android省市区三级联动
- android 省市区三级联动
- android 省市区选择三级联动
- Android省市区三级联动控件
- Android之省市区三级联动
- android省市区三级联动实现
- Android--Spinner实现省市区三级联动
- Android 地址选择器,实现省市区三级联动
- Android省市区三级联动滚轮选择
- Android(省市区三级联动Dialog)Demo
- Android实现省市区三级联动效果
- Android省市区三级联动的实现
- Android 地址选择器,实现省市区三级联动
- Android开发之实现省市区三级联动
- Android省市区三级联动和地区定位
- app接口简单理解
- 互联网网站的反爬虫策略浅析
- ListView, GirldList 等setCurrentItem 不立即刷新
- Android Studio插件
- 关键字-分节6(if、else 组合,bool,float及指针)
- Android-省市区三级联动
- linux文件3
- js获取屏幕
- dojo:animation
- Android滑动标签和viewPager结合使用
- 视频直播的实现
- 学习C++ -> 类(Classes)的定义与实现
- CSU 1632 最长公共前缀(出现超过两次的不同子串有多少个)
- 聊斋(storys)