利用ViewPage实现-->三级地址列表展 --><贡献服务端源码>
来源:互联网 发布:mac上的办公软件有哪些 编辑:程序博客网 时间:2024/05/14 14:04
最近ViewPager写多了。看到某宝的地址选择界面,不由得就有了使用ViewPager展示地址列表的想法来。
- 完成了基本功能,自己简单封装了HttpUrlConnection进行网络访问,项目运用请使用改用三方工具
- 自己写的服务器,请求字段的要求参考压缩包文档,(不建议修改字段,否则改动较大,不如自己写)
- 暂时没有发现严重BUG. 都是用些基础的东西,想要更炫的效果,可以自己包装下
三方资源: LazyViewPager 、GSON
注意:本地资源并不全面,只供展示界面效果。
设计思想:
当全部地址列表页面展示出来后,再次点击销毁 ‘ 区 ’ 界面,杜绝地址信息不匹配的BUG
使用LazyViewPager 懒加载功能,解决界面销毁,缓存遗留,滑动可见BUG
效果图:
布局比较简单,就不贴源码了。 由于复用了列表展示的page页面,逻辑上处理有些麻烦。解析的bean对象也是复用的,限制了服务端的字段类型。
- 下面是指示线的位移逻辑,以及页面改变时修改TYPE(地址类型)。
- 通过ViewPager.OnPageChangeListener 实现。
/** * 界面改变事件监听 * TYPE: 1=市, 2=区、县, other=省 */private LazyViewPager.OnPageChangeListener dealOnPagerChangeListener = new LazyViewPager.OnPageChangeListener() { /** 滑动中 */ @Override public void onPageScrolled(int position, float positionOffset , int positionOffsetPixels) { float disX = positionOffset * lineWidth;//获取滑动的距离 float startX = disX + position * lineWidth;//获取指示线起始位置 indicate_line.setTranslationX(startX);//设置位移动画 } /** 当页面改变后 */ @Override public void onPageSelected(int position) { TYPE = position + 1; //这里更改TYPE的值需要TYPE初值=1.否则将不能触发页面改变监听 int bule = getResources().getColor(R.color.colorPrimary); int accent = getResources().getColor(R.color.colorAccent); tv_province.setTextColor(position==0 ? accent : bule); //字体颜色选择 tv_city.setTextColor(position==1 ? accent : bule); tv_area.setTextColor(position==2 ? accent : bule); } @Override public void onPageScrollStateChanged(int state) {}};
- 公用的解析方法。这是本地资源的解析方法,网络资源的解析,多加了响应结果字段的判断。 这个代码短些,就贴这个了
- 本来也想把这部分抽出个公共方法的,无奈,脑细胞有限,尝试了几次并没什么进展,由于复用的bean,page页面。
//TODO 本地资源获取,联网可删除 private void insertAssets(final String fileName){ new Thread(){ @Override public void run() { try { InputStream inputStream = getAssets().open(fileName); final String stringFromStream = StreamUtils.getStringFromStream(inputStream); runOnUiThread(new Runnable() { @Override public void run() { parseAssetsJson(stringFromStream); } }); } catch (IOException e) { e.printStackTrace(); } } }.start(); }
/** * json解析本地 * @param json *///TODO 本地资源获取,联网可删除 protected void parseAssetsJson(String json) { try { Gson gson = new Gson(); //解析 AreaJsonBean address = gson.fromJson(json, AreaJsonBean.class);//分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if(address.province != null){ //加载 省列表Fragment ArrayList<AddressArea> provinces = address.province; Log.e("province====", provinces.toString()); if(pagers.size() == 0){ pagers.add(mProvince); }else { mProvince = pagers.get(0); } mProvince.setData(provinces);//设置数据 initLineWidth();//刷新viewPager适配器 mProvince.setOnItemClick(dealOnItemClickLdistener); area_viewpager.setCurrentItem(0); }//分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if(address.city != null){ //加载市列表Fragment ArrayList<AddressArea> citys = address.city; if(pagers.size() == 1){ pagers.add(mCity); }else{ mCity = pagers.get(1); } mCity.setData(citys); //设置数据 initLineWidth();//刷新viewPager适配器 mCity.setOnItemClick(dealOnItemClickLdistener); area_viewpager.setCurrentItem(1); }//分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if(address.area != null){ ArrayList<AreaJsonBean.AddressArea> aeras = address.area; if(pagers.size() == 2){ pagers.add(mArea); }else{ mArea = pagers.get(2); } mArea.setData(aeras); //填充数据 initLineWidth();//刷新viewPager适配器 mArea.setOnItemClick(dealOnItemClickLdistener); area_viewpager.setCurrentItem(2); } } catch (Exception e) { e.printStackTrace(); } }
- 自己重定义的OnItemClickLestener 方便获取条目信息,记录信息是根据请求类型分别记录 省 市 区
/** * 处理地址列表条目点击事件 */ private AreaPager.DealOnItemClickListener dealOnItemClickLdistener = new AreaPager.DealOnItemClickListener() { @Override public void dealOnItemClickListener(List areaList, int position) { AddressArea addressArea = (AddressArea) areaList.get(position); switchRecord(addressArea); //选择记录地址信息// requestNet(addressArea.areaID); //开启子线程,获取网络数据 //TODO 联网开启 /** TYPE: 1=市, 2=区、县, other=省 */ } };
资源包
附上资源:http://download.csdn.net/detail/lee465357793/9687041android:
GitHub:https://github.com/Lee465357793/AddressDemo
0 0
- 利用ViewPage实现-->三级地址列表展 --><贡献服务端源码>
- android中用ExpandableListView实现三级扩展列表(附源码)
- android中用ExpandableListView实现三级扩展列表(附源码)
- Android,三级列表实现
- [android] 利用 ViewPage 实现滑动屏
- AndroidExpandableListView实现三级列表显示
- ExpandableListView三级列表的实现
- ViewPage实现
- PHP源码-利用 QQWry.Dat 实现 IP 地址高效检索
- PHP源码-利用 QQWry.Dat 实现 IP 地址高效检索
- 下拉列表三级联动-----三维数组实现
- android中用ExpandableListView实现三级扩展列表
- 省市县三级列表(jsp实现)
- 省市县三级列表(jsp实现)
- js实现城市列表的三级联动
- android —— 自定义控件 利用 ViewPage 实现滑动屏
- android利用ViewPage和ImageView实现主界面导航
- angularjs实现地址的三级联动
- JQuery onload、ready概念介绍及使用方法
- spark2.0.1 on yarn with hue 集群搭建部署(三)msyql安装
- 总结 - 写在NOIP2016之后
- Cpp Concurrency In Action(读书笔记8)——高级线程管理
- Springboot自定义异常处理
- 利用ViewPage实现-->三级地址列表展 --><贡献服务端源码>
- 排序 --数组
- 一个好用的下载工具--Aria2
- 静态网页的表单
- oracle触发器学习笔记
- Retrofit简单入门
- LeetCode 18. 4Sum
- Agri-Net poj1258||Kruskal模板
- Core Animation