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文件进行编写。具体实现见代码
  1. 准备操作成数据的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];  }  };  
  1. 三级联动选择跳转:
@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相关推荐

  1. android 京东收货地址,手机京东商城怎么添加收货地址?

    想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...

  2. 【测试】SAP 委外加工收货BAPI Demo

    一.创建委外采购订单(事务代码ME21N) 二.将所需材料发货至供应商处(事务代码MB1B) 查看供应商库存报表(事务代码MBLB) 三.委外PO的收货(这里使用BAPI_GOODSMVT_CREAT ...

  3. sap 采购订单中收货容差的取值顺序

    1.主数据的中的容差设置是在没有息信记录的情况下才有效. 2.当信息记录中删除时,采购订单的容差会带物料主数据采购试图中的容差 3.信息记录的中的容差设置优先级别高. 当主数据中的容差与信息记录的容差 ...

  4. SAP中收货到WM库位和非WM管理库位的区别应用实例

    在的MM和WM模块的公司中,很多时候如果关联到WM中的仓库移动,MM中的动作相应就会产生一些关联的信息或动作:如本例中MIGO对同一物料收货到不同库位(带WM管理库位和不带WM管理库位)后,用MB51 ...

  5. SAP中收货没有产生检验批库存的原因分析推测实例

    近期接到用户反馈,在QM和MM的集成应用中,收化产生检验批之后,没有相应产生检验批库存. 首先,在对比中发现(己标记)除了没有检验批库存标签外,系统状态也有所不同,少一个SPCO. 试试打开详细的系统 ...

  6. ios仿淘宝管理收货地址demo

    在上篇中出现了复用的问题,然后是用数组承接的,现在我换了一种方法 (1)自定义cell.h @class MyTableViewCell; //创建一个代理 @protocol myTabVdeleg ...

  7. 电商项目—收货地址管理模块开发

    功能介绍:添加地址.删除地址.更新地址.地址列表.地址分页.地址详情 学习目标: spingmvc数据绑定中兑现给绑定 mybatis自动生成主键.配置和使用 如何避免横向越权漏洞的巩固 接口设计: ...

  8. Android中notification通知的Demo——震动,铃声,Led灯闪烁

    这里要注意几点: 1. notification的各种方法及参数的应用 2. 旧版本的SDK和新版本的SDK消息推送的写法是有些不一样的   1. notification的各种方法及参数的应用  ( ...

  9. 安卓开发学习笔记(1)使用Bundle在Activity之间交换数据(实例:模拟淘宝的填写并显示收货地址的功能)

    运行结果: 代码截图: 不要忘记在manifest->AndroidManifest.XML中添加新的Activity,否则会闪退 MainActivity.java AddressActivi ...

最新文章

  1. iOS开发之--Masonry多个平均布局
  2. PHP的引用传值值传递
  3. 7-55 空心字母金字塔 (10 分)
  4. java swing 禁用鼠标事件_Java学习笔记:swing中树控件,设置树节点的图标,按钮美化,鼠标事件,禁止鼠标双击...
  5. mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
  6. uoj#119. 【UR #8】决战圆锥曲线(线段树+复杂度分析)
  7. 插入排序 希尔排序 C++
  8. c++组合 聚合 关联
  9. MyBatis复习(八):MyBatis 分页插件 PageHelper
  10. lamp软件包安装(rpm)
  11. Makefile .PHONY用法
  12. 拓端tecdat|使用R语言随机波动模型SV处理时间序列中的随机波动率
  13. Google Analytics(分析)网址构建器
  14. PS批量制作获奖证书并导出PNG
  15. MyApps接口引擎,打破跨系统间的壁垒
  16. javascript html注释,javascript html注释
  17. 联想本win10 virtualbox 安装centos
  18. 所谓的AI芯片到底指什么?
  19. 基于SSM二手房租赁系统
  20. 计算机二级msoffice操作题如何评分,计算机二级MSOffice操作题及答案解析

热门文章

  1. 支付宝小程序(支付)
  2. ftp服务器修改pasv,ftp服务器修改pasv
  3. 【通信协议】一文搞懂SPI
  4. CC2640R2F BLE5.0 CC2640R2BLE5.0开发文档
  5. 机器学习sklearn之预估器(estimator)使用
  6. Nvidia Xavier Nx平台GMSL接口imx390相机驱动调试记录
  7. oracle数据库:查询平均分时,保留小数位数
  8. excel文件被写保护怎么解除_如何去掉Excel表格中的密码保护?
  9. Python如何删除多余的空格与空行(有代码)
  10. 通信算法之九十七:4G LTE通信系统 PHICH信道处理流程