最近想做个商城仿淘宝收货地址选择,在网上搜索“android 淘宝收货地址”,就看到了想要的效果。

文章写的不错,可惜菜鸟级的我很多看不懂,所以用例外一种方式实现了。

这里用到的数据时之前在做腾讯地图用到的接口,先附上效果图:

源码下载

这里的源码下载的是一个module,需要导入到自己项目中才可以用。

使用步骤如下:




导入成功之后,选择tbareachoosedemo,然后运行他。


关键代码类:

1、AreaInfo.class 地区类

public class AreaInfo {private String fullname; //地区名字private int id; //地区编码public String getFullname() {return fullname;}public void setFullname(String fullname) {this.fullname = fullname;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

2、ResultInfo.class  调用接口返回的数据类

public class ResultInfo {private String message;private int status;private List<List<AreaInfo>> result; //获取省份列表,上面两个可以不用理public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public List<List<AreaInfo>> getResult() {return result;}public void setResult(List<List<AreaInfo>> result) {this.result = result;}
}

3、AreaHttpUtils.class 获取地区网络加载类

public class AreaHttpUtils {public final static String RESULT = "result";public final static String AREACODE = "areacode";public final static String AREA = "area";public final static String PROVINCE = "province";public final static String CITY = "city";public final static String DISTRICT = "district";private FragmentActivity mActivity;private OnAreaListener mOnAreaListener;private SweetAlertDialog mLoadingDialog;public AreaHttpUtils(FragmentActivity activity) {mActivity = activity;}/*** 请求获取地区数据* @param pDistrict 地区编码id*/public void getDistrict(int pDistrict) {TencentSearch tencentSearch = new TencentSearch(mActivity);DistrictChildrenParam districtChildrenParam = new DistrictChildrenParam();//如果不设置id,则获取全部数据districtChildrenParam.id(pDistrict);showProgressDialog("加载中...");tencentSearch.getDistrictChildren(districtChildrenParam, new HttpResponseListener() {@Overridepublic void onSuccess(int arg0, BaseObject arg1) {// TODO Auto-generated method stubif (arg1 == null) {return;}String result = new Gson().toJson(arg1);mOnAreaListener.onSuccess(result);dismissProgressDialog();}@Overridepublic void onFailure(int arg0, String arg1, Throwable arg2) {// TODO Auto-generated method stubmOnAreaListener.onFailure(arg1);dismissProgressDialog();}});}/*** 新建一个Fragment* @param result 接口返回的数据* @param area 数据是属于省份或者城市或区域* @param fragmentId fragment的省份或者城市或区域 布局*/public void newFragment(String result, String area, int fragmentId) {FragmentManager fm = mActivity.getSupportFragmentManager();Fragment fragment = fm.findFragmentById(fragmentId);Bundle args = new Bundle();args.putString(RESULT, result);args.putString(AREA, area);if (fragment == null) {fragment = Fragment.instantiate(mActivity, AreaFragment.class.getName(), args);fm.beginTransaction().add(fragmentId, fragment).commit();}}public OnAreaListener getOnAreaListener() {return mOnAreaListener;}public void setOnAreaListener(OnAreaListener mOnAreaListener) {this.mOnAreaListener = mOnAreaListener;}public interface OnAreaListener {void onSuccess(String result);void onFailure(String arg1);}/*** 显示sweetalertDialog加载框* @param message 显示的信息*/public void showProgressDialog(String message) {mLoadingDialog = new SweetAlertDialog(mActivity, SweetAlertDialog.PROGRESS_TYPE);mLoadingDialog.getProgressHelper().setBarColor(Color.parseColor("#A5DC86"));mLoadingDialog.setTitleText(message);mLoadingDialog.show();}public void dismissProgressDialog() {if (mLoadingDialog != null || mLoadingDialog.isShowing()) {mLoadingDialog.dismiss();}}
}

4、AreaFragment.class 三页所公用的Fragment

public class AreaFragment extends Fragment implements AdapterView.OnItemClickListener {private View mView;private Bundle mArgs;private ListView mListView;private AreaAdapter mAdapter;private List<AreaInfo> mInfos = new ArrayList<>();private String sArea;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {if (mView == null) {mView = inflater.inflate(R.layout.fragment_area, container, false);initViews();} else if (mView.getParent() != null) {((ViewGroup) mView.getParent()).removeView(mView);}return mView;}private void initViews() {mListView = (ListView) mView.findViewById(R.id.area_listview);mAdapter = new AreaAdapter(getActivity());mListView.setAdapter(mAdapter);mListView.setOnItemClickListener(this);setData();}private void setData() {if (mArgs == null) {mArgs = this.getArguments();String result = mArgs.getString(AreaHttpUtils.RESULT);sArea = mArgs.getString(AreaHttpUtils.AREA);Gson gson = new Gson();ResultInfo resultInfo = gson.fromJson(result, ResultInfo.class);mInfos = resultInfo.getResult().get(0);mAdapter.setList(mInfos);}}@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {String area = mInfos.get(i).getFullname();switch (sArea) {case AreaHttpUtils.PROVINCE:startActivity(AreaCityActivity.class, i);AddressInfo.getInstance().setsProvince(area);break;case AreaHttpUtils.CITY:startActivity(AreaDistrictActivity.class, i);AddressInfo.getInstance().setsCity(area);break;case AreaHttpUtils.DISTRICT:AddressInfo.getInstance().setsDistrict(area);toAreaActivity();break;}}private void startActivity(Class<? extends FragmentActivity> cls, int position) {Intent intent = new Intent(getActivity(), cls);intent.putExtra(AreaHttpUtils.AREACODE, mInfos.get(position).getId());getActivity().startActivity(intent);}private void toAreaActivity() {Intent mIntent = new Intent(getActivity(), AreaActivity.class);mIntent.putExtra("address", AddressInfo.getInstance().getAddress());mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);getActivity().startActivity(mIntent);}
}

5、BaseFragmentAcitivity.class

用于让省份、城市、地区的三个Activity继承它,然后进行new上面的Fragment。以为这里的AreaFragment是公用的,只要Bundle进行传数据然后在AreaFragment中判断要生成那个Fragment

public class BaseFragmentActivity extends FragmentActivity {private AreaHttpUtils mUtils;private ImageView mImageView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);mImageView = (ImageView) findViewById(R.id.iv_back);mImageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finish();}});}public void setAreaType(final String type) {mUtils = new AreaHttpUtils(this);mUtils.setOnAreaListener(new AreaHttpUtils.OnAreaListener() {@Overridepublic void onSuccess(String result) {setFragment(type, result);}@Overridepublic void onFailure(String arg1) {}});Intent intent = this.getIntent();if (intent != null) {mUtils.getDistrict(intent.getIntExtra(AreaHttpUtils.AREACODE, 0));}}private void setFragment(String type, String result) {switch (type) {case AreaHttpUtils.PROVINCE:mUtils.newFragment(result, type, R.id.province_fragment);break;case AreaHttpUtils.CITY:mUtils.newFragment(result, type, R.id.city_fragment);break;case AreaHttpUtils.DISTRICT:mUtils.newFragment(result, type, R.id.district_fragment);break;}}
}

6、看到上面效果的listview拉下来的item跟滑效果么。其实他就是在Adapter 适配器中,

private int lastPosition;public View getView(int position, View convertView, ViewGroup parent) {if (lastPosition < position && lastPosition != 0) {ObjectAnimator.ofFloat(convertView, "translationY", convertView.getHeight() * 2, 0).setDuration(500).start();}lastPosition = position;}

在上面的项目中build.gradle中要记得引用

compile 'cn.pedant.sweetalert:library:1.3'

这里引用的时候要注意写上下面两句,避免冲突。

项目的导包跟目录如下图:

Android 仿淘宝2017添加地址相关推荐

  1. Android 仿淘宝2018添加地址

    先来看看淘宝2018的添加收货地址的效果 分析实现的原理: bottomDialog=tabLayout+RecyclerView 其中的2个特点: 1.tablayout的动态添加的,并且选中ite ...

  2. Android仿淘宝、京东Banner滑动查看图文详情

    文章目录 写在前面 效果图 原理分析 核心代码 源码地址 写在前面 本文基于 ViewPager2 实现的 Banner 效果,进而实现了仿淘宝.京东Banner滑动至最后一页时继续滑动来查看图文详情 ...

  3. Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能

    需要做一个仿淘宝客户端ViewPager滑动到最后一页,再拖动的时候跳到详情的功能,刚开始我也迷糊了,通过查阅相关资料发现有好多种实现方法,下面小编给大家分享实例代码,感兴趣的朋友一起看看吧 需要做一 ...

  4. Android仿淘宝首页UI(附代源代码及示例图片)

    Android仿淘宝首页UI(附代源代码及示例图片) 可以收获 运行出来的效果 部分代码 源代码 可以收获 更改Layout中的文字和drawble中的图片即可生成适应于不同情景的APP,帮助开发者完 ...

  5. Android仿淘宝淘口令实现

    先复制信息到剪切板,然后再打开淘宝,.既然是复制,肯定是复制到系统的剪切板了,我们可以通过下边的代码来把口令给复制到系统的剪切板里 1 2 3 4 5 6 //获取剪贴板管理器: ClipboardM ...

  6. Android仿淘宝tab返回

    一.概述                 淘宝相信大家都在用过,不过不知道各位有没有仔细观察过淘宝的tab界面,尤其是返回的时候的逻辑.最近闲来无事,猛然发现淘宝的tab界面还真的挺好玩,废话不多说, ...

  7. Android 仿淘宝商品详情页下拉足迹Demo

    DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...

  8. Android仿淘宝口令复制弹出框功能

    1.我要做什么 应用场景: 我的朋友使用微信给我发一个淘宝链接的口令,我复制口令,进入我的淘宝,弹框,显示口令的详情,点击详情,进入商品页面. 存在的问题: 但这存在一个问题,我的淘宝并不总是关闭状态 ...

  9. Android仿淘宝底部图标导航栏

     在上一篇中,简单的使用透明主题的Activity实现了仿微信右侧顶部的对话框,上午又花了两个小时研究了一下淘宝底部的导航栏实现,网上的做法也有很多,今天我就使用一种通过基本控件加上布局的方式,没有任 ...

最新文章

  1. myeclipse搭建php,MyEclipse常用配置图文教程
  2. deploy java eclipse_使用eclipse的mvn deploy部署本地包到maven私有库
  3. 再谈J.D.Ewards历史与现状,JDE人才缺失现状
  4. Android实现文件下载并自动安装apk包
  5. 初级前端工程师笔试技巧总结,祝你顺利拿高分
  6. leetcode 109 --- 有序链表变成二叉搜索树
  7. Python 参数传入sys.argv和getopt.getopt()的用法
  8. 均分纸牌(洛谷-P1031)
  9. Linux读写执行权限
  10. 统计过去数据一个php脚本
  11. Could not create local repository at /home/yizhenn/.m、IDEA倒入maven项目无法导报问题
  12. Java高级工程师必备技术栈
  13. 【教程分享】大数据视频教程
  14. 爱加密加固病毒分析-破解篇
  15. 会让你变得与众不同的22个技巧
  16. 房价与房租出现大幅“背离”?
  17. 创新思维与方法期末考试答案
  18. 基于JAVA小微企业人事管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  19. 新手必需知道的查看Windows系统是否被重启的方法
  20. Python-子列表最大长度

热门文章

  1. 网站设计网站开发流程详细介绍
  2. 在PPT里制作具有上下标的文字效果
  3. 解决Eclipse中的卡死各种现象
  4. 根据经纬度获取两点之间的距离 -- 腾讯地图(PHP后台)
  5. 数字逻辑考试题型及重点
  6. 您无权输入许可证密钥,请请使用系统管理员账户重试
  7. Java生成png文件字体不清晰,java操作字体生成png图片,该怎么解决
  8. 光伏并网pscad_分布式光伏发电关键技术
  9. unity实现镜头拉近拉远的方式
  10. 1+X云计算平台运维与开发认证 资源