Android中收货地址管理Demo
Android 收货地址管理,城市选择为省市区三级联动
最近公司在做一个电商平台,这里展示的是一个收货地址管理的功能,实现了省市区三级联动的集成,本Demo得力于网络提供的三级联动案例,特此感谢提供者。
首先就是完成布局UI设计:
UI布局代码:
主页面布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextView android:padding="10dp"android:textSize="16sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="收货人:"android:layout_alignParentLeft="true"/><EditText
android:layout_weight="1"android:id="@+id/et_shouhuoren"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:textSize="16sp"android:padding="10dp" />
</LinearLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="#F6F5F4"/><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextView android:padding="10dp"android:textSize="16sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="手机号:"android:layout_alignParentLeft="true"/><EditText
android:layout_weight="1"android:id="@+id/et_Mobile"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:textSize="16sp"android:padding="10dp" />
</LinearLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="#F6F5F4"/><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextView android:padding="10dp"android:textSize="16sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="邮编 :"android:layout_alignParentLeft="true"/><EditText
android:layout_weight="1"android:id="@+id/et_youbian"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:textSize="16sp"android:padding="10dp" />
</LinearLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="#F6F5F4"/><LinearLayout
android:background="#ffffff"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextView android:padding="10dp"android:textSize="16sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所在地区:"android:layout_alignParentLeft="true"/><RelativeLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1" ><TextView
android:layout_weight="1"android:clickable="true"android:id="@+id/tv_city1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="16sp"android:padding="10dp" /><ImageView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:background="@drawable/icon_right_jiantou" /></RelativeLayout></LinearLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="#F6F5F4"/><LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextView android:padding="10dp"android:textSize="16sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="详细地址:"android:layout_alignParentLeft="true"/><EditText android:layout_weight="1"android:id="@+id/et_xiangxidizhi"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:textSize="16sp"android:padding="10dp" />
</LinearLayout><View android:layout_width="match_parent"android:layout_height="1dp"android:background="#F6F5F4"/><Button
android:id="@+id/btn_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:background="#00CD8C"android:text="确定"android:textColor="@color/white"android:textSize="16sp" /></LinearLayout>
省市区三级联动布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><include layout="@layout/title" android:id="@+id/ll_title"/><LinearLayout
android:id="@+id/rg"android:layout_below="@+id/ll_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextView
android:id="@+id/rb_province"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:checked="true"android:gravity="center"android:paddingBottom="8dp"android:paddingTop="8dp"android:singleLine="true"android:text="省" /><TextView
android:id="@+id/rb_city"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:paddingBottom="8dp"android:paddingTop="8dp"android:singleLine="true"android:text="市" /><TextView
android:id="@+id/rb_district"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:paddingBottom="8dp"android:paddingTop="8dp"android:singleLine="true"android:text="区/县" /></LinearLayout><ListView
android:id="@+id/lv_city"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout>
业务逻辑:
三级联动主要就是采用数据库提供中国省市区三级联动数据库,来填充数据,除了本Demo的形式,还可以使用XML文件进行编写。具体实现见代码
- 准备操作成数据的Bean
public String getRegionId() {return regionId;}public void setRegionId(String regionId) {this.regionId = regionId;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getDistrict() {return district;}public void setDistrict(String district) {this.district = district;}public String getProvinceCode() {return provinceCode;}public void setProvinceCode(String provinceCode) {this.provinceCode = provinceCode;}public String getCityCode() {return cityCode;}public void setCityCode(String cityCode) {this.cityCode = cityCode;}public String getDistrictCode() {return districtCode;}public void setDistrictCode(String districtCode) {this.districtCode = districtCode;}public static final Parcelable.Creator<City> CREATOR = new Creator<City>() { public City createFromParcel(Parcel source) { City mCity = new City(); mCity.regionId = source.readString(); mCity.province = source.readString(); mCity.city = source.readString(); mCity.district = source.readString(); mCity.provinceCode = source.readString(); mCity.cityCode = source.readString(); mCity.districtCode = source.readString(); return mCity; } public City[] newArray(int size) { return new City[size]; } };
- 三级联动选择跳转:
@Overridepublic void onClick(View v) {if(v == tv_city1){Intent in = new Intent(this, CitySelect1Activity.class);in.putExtra("city", city);startActivityForResult(in, 1);}}
private void viewInit() {city = new City();Intent in = getIntent();city = in.getParcelableExtra("city");for (int i = 0; i < tvs.length; i++) {tvs[i] = (TextView) findViewById(ids[i]);//对应的城市Idtvs[i].setOnClickListener(this);//选择对应城市的点击事件}if(city==null){city = new City();city.setProvince("");city.setCity("");city.setDistrict("");}else{if(city.getProvince()!=null&&!city.getProvince().equals("")){tvs[0].setText(city.getProvince());//省}if(city.getCity()!=null&&!city.getCity().equals("")){tvs[1].setText(city.getCity());//市}if(city.getDistrict()!=null&&!city.getDistrict().equals("")){tvs[2].setText(city.getDistrict());//县区}}
地区管理的Bean
/*** 地区管理* @author bin**/
public class MyRegion {private String name ;private String id;private String parent_id;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getParent_id() {return parent_id;}public void setParent_id(String parent_id) {this.parent_id = parent_id;}
}
操作数据库的管理器,所有的省市区信息都来自数据库
private final int BUFFER_SIZE = 1024;public static final String DB_NAME = "city.s3db";public static final String PACKAGE_NAME = "com.an.cityselect";public static final String DB_PATH = "/data"+ Environment.getDataDirectory().getAbsolutePath() + "/"+ PACKAGE_NAME;private SQLiteDatabase database;private Context context;private File file = null;public CityDBManager(Context context) {this.context = context;}public void openDatabase() {this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);}public SQLiteDatabase getDatabase() {return this.database;}private SQLiteDatabase openDatabase(String dbfile) {try {file = new File(dbfile);if (!file.exists()) {InputStream is = context.getResources().openRawResource(R.raw.city);if (is != null) {} else {}FileOutputStream fos = new FileOutputStream(dbfile);if (is != null) {} else {}byte[] buffer = new byte[BUFFER_SIZE];int count = 0;while ((count = is.read(buffer)) > 0) {fos.write(buffer, 0, count);fos.flush();}fos.close();is.close();}database = SQLiteDatabase.openOrCreateDatabase(dbfile, null);return database;} catch (FileNotFoundException e) {Log.e("cc", "File not found");e.printStackTrace();} catch (IOException e) {Log.e("cc", "IO exception");e.printStackTrace();} catch (Exception e) {Log.e("cc", "exception " + e.toString());}return null;}public void closeDatabase() {if (this.database != null)this.database.close();}
总结:这个整体实现主要是准备数据库数据(可以网上下载),在布局的时候采用ListView填充省市县数据信息。通过设置ListView的SetOnItemClickListener事件来实现三级联动跳转。采用HorizontalScrollView实现ListView页面与表头ListView中的TextView的视图对应切换,最终通过获取所有城市信息设置给布局中的EditText,实现地址管理。
本文特别感谢网络上三级联动资源提供的小伙伴,代码可以正常运行使用。
Demo源码下载
Android中收货地址管理Demo相关推荐
- android 京东收货地址,手机京东商城怎么添加收货地址?
想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...
- 【测试】SAP 委外加工收货BAPI Demo
一.创建委外采购订单(事务代码ME21N) 二.将所需材料发货至供应商处(事务代码MB1B) 查看供应商库存报表(事务代码MBLB) 三.委外PO的收货(这里使用BAPI_GOODSMVT_CREAT ...
- sap 采购订单中收货容差的取值顺序
1.主数据的中的容差设置是在没有息信记录的情况下才有效. 2.当信息记录中删除时,采购订单的容差会带物料主数据采购试图中的容差 3.信息记录的中的容差设置优先级别高. 当主数据中的容差与信息记录的容差 ...
- SAP中收货到WM库位和非WM管理库位的区别应用实例
在的MM和WM模块的公司中,很多时候如果关联到WM中的仓库移动,MM中的动作相应就会产生一些关联的信息或动作:如本例中MIGO对同一物料收货到不同库位(带WM管理库位和不带WM管理库位)后,用MB51 ...
- SAP中收货没有产生检验批库存的原因分析推测实例
近期接到用户反馈,在QM和MM的集成应用中,收化产生检验批之后,没有相应产生检验批库存. 首先,在对比中发现(己标记)除了没有检验批库存标签外,系统状态也有所不同,少一个SPCO. 试试打开详细的系统 ...
- ios仿淘宝管理收货地址demo
在上篇中出现了复用的问题,然后是用数组承接的,现在我换了一种方法 (1)自定义cell.h @class MyTableViewCell; //创建一个代理 @protocol myTabVdeleg ...
- 电商项目—收货地址管理模块开发
功能介绍:添加地址.删除地址.更新地址.地址列表.地址分页.地址详情 学习目标: spingmvc数据绑定中兑现给绑定 mybatis自动生成主键.配置和使用 如何避免横向越权漏洞的巩固 接口设计: ...
- Android中notification通知的Demo——震动,铃声,Led灯闪烁
这里要注意几点: 1. notification的各种方法及参数的应用 2. 旧版本的SDK和新版本的SDK消息推送的写法是有些不一样的 1. notification的各种方法及参数的应用 ( ...
- 安卓开发学习笔记(1)使用Bundle在Activity之间交换数据(实例:模拟淘宝的填写并显示收货地址的功能)
运行结果: 代码截图: 不要忘记在manifest->AndroidManifest.XML中添加新的Activity,否则会闪退 MainActivity.java AddressActivi ...
最新文章
- iOS开发之--Masonry多个平均布局
- PHP的引用传值值传递
- 7-55 空心字母金字塔 (10 分)
- java swing 禁用鼠标事件_Java学习笔记:swing中树控件,设置树节点的图标,按钮美化,鼠标事件,禁止鼠标双击...
- mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
- uoj#119. 【UR #8】决战圆锥曲线(线段树+复杂度分析)
- 插入排序 希尔排序 C++
- c++组合 聚合 关联
- MyBatis复习(八):MyBatis 分页插件 PageHelper
- lamp软件包安装(rpm)
- Makefile .PHONY用法
- 拓端tecdat|使用R语言随机波动模型SV处理时间序列中的随机波动率
- Google Analytics(分析)网址构建器
- PS批量制作获奖证书并导出PNG
- MyApps接口引擎,打破跨系统间的壁垒
- javascript html注释,javascript html注释
- 联想本win10 virtualbox 安装centos
- 所谓的AI芯片到底指什么?
- 基于SSM二手房租赁系统
- 计算机二级msoffice操作题如何评分,计算机二级MSOffice操作题及答案解析
热门文章
- 支付宝小程序(支付)
- ftp服务器修改pasv,ftp服务器修改pasv
- 【通信协议】一文搞懂SPI
- CC2640R2F BLE5.0 CC2640R2BLE5.0开发文档
- 机器学习sklearn之预估器(estimator)使用
- Nvidia Xavier Nx平台GMSL接口imx390相机驱动调试记录
- oracle数据库:查询平均分时,保留小数位数
- excel文件被写保护怎么解除_如何去掉Excel表格中的密码保护?
- Python如何删除多余的空格与空行(有代码)
- 通信算法之九十七:4G LTE通信系统 PHICH信道处理流程