先来看看淘宝2018的添加收货地址的效果

分析实现的原理: bottomDialog=tabLayout+RecyclerView

其中的2个特点:

1、tablayout的动态添加的,并且选中item之后会自动跳入下一个tab
2、RecyclerView选中之后,下次选中对应的tab会定位的RecyclerView指定的位置。(比如:选中广州市tab,下面的RecyclerView定位到广州市)

这里的地址数据来自:2018最新area.json(智行火车票)

项目实现的效果:

其中BottomDialog.class:

/*** Description :** @author WSoBan* @date 2018/05/03*/
public class BottomDialog extends Dialog {private OnSelectedResultCallBack resultCallBack;private LayoutBottomSheetDialogBinding mDialogBinding;private AreaAdapter mAdapter;private Map<Integer, AreaBean> currentMap = new TreeMap<>();public BottomDialog(Context context) {super(context, R.style.bottom_dialog);init(context);}private void init(Context context) {mDialogBinding = DataBindingUtil.inflate(LayoutInflater.from(getContext()),R.layout.layout_bottom_sheet_dialog, null, false);setContentView(mDialogBinding.getRoot());initView();Window window = getWindow();WindowManager.LayoutParams params = window.getAttributes();params.width = WindowManager.LayoutParams.MATCH_PARENT;
//        params.height = DensityUtils.dp2px(context, 400);window.setAttributes(params);window.setGravity(Gravity.BOTTOM);}private void initView() {mDialogBinding.ivClose.setOnClickListener(v -> dismiss());mAdapter = new AreaAdapter(R.layout.item_area);mAdapter.setOnSelectedListener((map, pos) -> {if (pos >= 2) {if (resultCallBack != null) {resultCallBack.onResult(currentMap.get(pos).getNames());}dismiss();} else {currentMap = map;mDialogBinding.tlTitle.removeAllTabs();for (Integer in : map.keySet()) {mDialogBinding.tlTitle.addTab(mDialogBinding.tlTitle.newTab().setText(map.get(in).getName()));}addChooseTab();}});LinearLayoutManager manager = new LinearLayoutManager(getContext());mDialogBinding.rv.setLayoutManager(manager);mDialogBinding.rv.addItemDecoration(new LineAreaItemDecoration(getContext(), 2));mDialogBinding.rv.setAdapter(mAdapter);mDialogBinding.tlTitle.setTabMode(TabLayout.MODE_SCROLLABLE);mDialogBinding.tlTitle.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {int pos = tab.getPosition();if (pos == 0) {mAdapter.setData(pos, AreaParser.getInstance().getProvinceList());} else {mAdapter.setData(pos, AreaParser.getInstance().getChildList(currentMap.get(pos - 1).getTid()));}//移动到指定位置mAdapter.moveToPosition(manager);}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});addChooseTab();}private void addChooseTab() {mDialogBinding.tlTitle.addTab(mDialogBinding.tlTitle.newTab().setText("请选择"), true);TabLayoutUtil.reflex(mDialogBinding.tlTitle);}public BottomDialog(Context context, int themeResId) {super(context, themeResId);init(context);}public BottomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {super(context, cancelable, cancelListener);init(context);}public void setResultCallBack(OnSelectedResultCallBack resultCallBack) {this.resultCallBack = resultCallBack;}public interface OnSelectedResultCallBack {void onResult(String result);}
}

代码太多久不一一写出来了,这里附上源码,了解下

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

  1. Android 仿淘宝2017添加地址

    最近想做个商城仿淘宝收货地址选择,在网上搜索"android 淘宝收货地址",就看到了想要的效果. 文章写的不错,可惜菜鸟级的我很多看不懂,所以用例外一种方式实现了. 这里用到的数 ...

  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仿淘宝底部图标导航栏

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

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

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

最新文章

  1. ssm启动报错cannot find class_SSM整合补充 RBAC(权限控制)过滤器
  2. 白话Elasticsearch46-深入聚合数据分析之Cardinality Aggs-cardinality去重算法以及每月销售品牌数量统计
  3. linux kernel中cache代码解读
  4. Keil uVision2 简介
  5. 二叉树的三叉链表实现c语言,数据结构:二叉树的三叉链表存储--Java实现
  6. Remoting入门实例
  7. 自定义session,cookie
  8. 上海高一物理公式整理
  9. 苹果电脑双系统正确打开方式,虚拟机已经Out了
  10. Java 浅拷贝和深拷贝的理解和实现方式
  11. 游戏画质修改器GFX工具箱(GFX tool)_9.9.8特别版
  12. Chrome源码剖析、上--多线程模型、进程通信、进程模型
  13. twitter如何以图搜图_没有完整图时,如何使用图深度学习?你需要了解流形学习2.0版本...
  14. transporter上传卡正在交付_Xcode11或Transporter上传app store 一直卡在Authenticating with the App Store 的解决...
  15. 掘金万亿母婴市场,宝宝树价值在哪里? | 一点财经
  16. 繁简转换的实现方式。
  17. 使用QrCode解析二维码
  18. 程序人生 - 猫咪驱虫多久一次?
  19. 游戏中为什么使用脚本游戏为什么会有脚本这个东西
  20. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记03

热门文章

  1. 微信小程序拍照加水印
  2. android webpage err_unknown_url_scheme
  3. 什么办法可以快速减肥,助你轻松摆脱赘肉烦恼
  4. 真实的上海IT圈:张江男vs漕河泾男(文末送书)
  5. 站长必装软件之火孤插件
  6. 实验3-11 计算油费 (15分)
  7. java 我爱你_java代码30行实现用我爱你重绘女朋友美照(我对你的爱,在每一个字里行间)...
  8. python中a* b是什么意思_Python中a-=b与a=a-b的区别是什么?
  9. python简单工厂模式_python版简单工厂模式
  10. 如何利用cmd删除文件夹