今日科技快讯

近日有媒体曝光了“羊毛党”的一个分类——运险客。运险客在淘宝平台购买了1件普通商品,外加5毛的运费险,卖家发货后,这个保险单子就生效了,商品到货后,运险客利用“7天无理由退货”的规则进行退货。于是保险公司将会掏出10元的运费给买家,这个10元差不多就是快递费,但是运险客和淘宝商家一样,他们的快递费也只有4-6元,他们就“赚取”了差价。

作者简介

本篇来自 BlinCheng 的投稿,分享了一个类似京东地址选择器的控件,希望对大家有所帮助!

BlinCheng 的博客地址:

http://blog.csdn.net/qq_25867141

简介

最近东西写的挺多的,这不又要弄一个类似于京东的地址选择器,然后刚开始我是不愿意自己去写的,这东西就是费时间,然后大致浏览了一会,发现真没有符合公司需求的,好吧,那就自己开撸。先看看效果图,不知道是不是大家想要的。然后京东是用在一个从下而上的弹窗里面的。

主要功能

1. 大致分为三个模块:顶部的Tab模块,中间的移动指示器模块,还有就是下面的list了。

2. 支持点击数据后自动跳到下一个Tab

3. 支持点击Tab后回到当前Tab的状态

4. 还有就是可以随意设置你想要的。

还是来说说怎么用吧。

集成导入(gradle)

1. Add the JitPack repository to your build file .Add it in your root build.gradle at the end of repositories:

2. Add the dependency

其余继承方式看:

https://jitpack.io/#Blincheng/AddressSelector

使用
  • XML直接使用

  • Java中使用

AddressSelector addressSelector = (AddressSelector) findViewById(R.id.address);
  • 设置Tab数量

addressSelector.setTabAmount(3);

也可以不设置,默认3级。

  • 设置数据列表的Itme回调OnItemClickListener

  • 设置Tab的点击事件回调OnTabSelectedListener

注意,一般来说这两个点击事件都要设置,并且数据的处理一定要搞清楚。

  • 其他的一些属性的设置

实现

现在我们开始说说实现方式吧,从需求上面来讲,我们需要写出来的东西具有以下几点:

  • 有指示器(Tab)

  • 有一条会动的横线

  • 下方有个列表

  • 上方的Tab和下方的列表都是可点击的。

其实,从功能角度实现上来讲,其实我们用 google 提供的现成的控件堆一下,其实也可以写出来。比如举个例子啊,上面的 tab 就用 google 自己的 TabLayout,下方的列表就用 RecyclerView,然后把数据什么的绑定以下,点击事件做一下,把异常处理掉,也能出来,就是说不方便二次使用。

然后实现思路:我这边直接继承 LinearLayout,然后一个一个往里面 addView 就好,简单粗暴。

Tab 的话可以继承 TextView,Line 的话继承 View 应该也行,下面的列表就直接用 RecyclerView。好了,看看如何实现吧。

Tab的实现:

先thinking,我们的 Tab 需要有文字,选中状态,然后应该还要一个 index。看代码:

很简单,就是重写一下 setText,然后根据选中的状态来设置对应的颜色即可。

实现Line

本来想了一下直接用 View 也能实现,但是后来想想既然要移动,有点小动画,外层既然用了线性布局,这边的横线还有长度的问题,所以也直接用横向的线性布局了。如下:

其实和 Tab 差不多,唯一不同的是需要之前选中的 oldIndex,因为毕竟有个动画嘛。

看看这个接口,在设置 index 的同时,把移动的动画也一起做了。

AddressSelectord 实现

因为之前就想好用继承 LinearLayout 的形式,所以也简单粗暴,直接一层一层去 addView 是吧,需要注意的是,这边有个这样的方法:

看出来了吧,其实就是去创建需要的 Tab,然后把点击事件等其他参数都设置好了,主要用来 AddressSelectord 内部来创建 Tab 时候用。然后必要的属性还是要提供接口设置的:

需要设置当前 tab 的数量,然后看这边又调用了 init()方法,也就是说其实这个时候 AddressSelectord 又重置了。所以在 init()方法 中有一个 removeAllViews() 需要调用。

下边儿列表的实现RecyclerView

然后一开始我就在想要不要提供什么 Adapter 可以让大家自己来绑定数据,然后又想了想,为了简单方便大家使用,所以我觉得还是暂时不写 Adapter 了。但是想想每个 item 的 Entity 不应该是死的,毕竟大家的项目还是不一样的,所以我最终采取了一种方式去实现。

public interface CityInterface {    String getCityName();
}

就是这个接口了,大家在设置数据源的时候,尽管设置自己的,然后唯一需要注意的是大家的 Item 需要去实现这个接口,返回我列表需要展示的文本,我用来展示列表的内容。只能要求大家做这么一点点了。所以在设置数据的时候也要求大家这么做了。

不然就简单粗暴抛出 throw new RuntimeException("AddressSelector cities must implements CityInterface"

这样就好说了,我在 setOnItemClickListener 可以直接返回 CityInterface,就解决一切问题了。

最后就是把要开放的接口开放一下,测测调调~

总结

然后,其实也是很简单的,就是练练手,做一些让自己和大家都觉得方便可行的事情。如果有什么地方有问题,或者有更好的建议真的很欢迎大家多多提出建议和意见,还有一句话就是说没事不要闲着,要多动动。

项目地址:

https://github.com/Blincheng/AddressSelector

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

类似于京东的地址选择器相关推荐

  1. android开发地址选择器,Android地址选择器 类似于京东的地址选择

    简介 最近东西写的挺多的,这不又要弄一个类似于京东的地址选择器,然后刚开始我是不愿意自己去写的,这东西真的是浪费时间.但是下班后回到家找了一圈没找到一个合适的,好吧,那我就自己来封装一个呗,反正生命在 ...

  2. android 京东地址,MUI仿京东App地址选择器

    才学JS不久,刚好项目需要一个京东地址选择器,所以尝试着写了一个,dom获取较为复杂,纯粹使用自己了解到的东西 依赖 //css是用rem写的 //mui提供的城市js HTML 请选择 请选择 请选 ...

  3. Android进阶之路 - 仿京东地址选择器使用指南

    因为现在项目的地址选择器比较low,自己又比较懒,所以就找到了仿京东的地址选择器,观赏几篇博文之后,发现总是被半路卡死,很难一路走到底,所以在github找到了项目地址,但是作者的功能简介又介绍的不是 ...

  4. 一次地址选择器的实践

    前言 我们知道,地址选择器是一个通用组件,网上的开源项目也有很多.那么为什么还会有这篇文章呢?因为我在调研过程中发现,虽然都是地址选择器,但是实现的方式却各不相同.以下是调研地址选择器的一些总结和思考 ...

  5. Android进阶之路 - Citypicker 五分钟内快速实现地址选择器

    从早期的时候就比较喜欢拉框架直接用,所以以前记录了很多 关于 CityPicker 框架,我用的时候还是2017年,但是这几年(2022)改变了很多,扩展性也很强,如果要了解最新使用的话,最好还是去 ...

  6. MUI 地址选择器 - picker使用

    MUI 地址选择器 - picker使用 很多安卓原生的地址选择器中,选择器基本是实时滚动的. 就像腾讯QQ应用的地址选择器一样! 效果截图如下: 代码如下: <!DOCTYPE html> ...

  7. 支付宝小程序组件库开发之省市区三级地址选择器组件

    支付宝小程序开发文档中并没有提供明确的省市区选择器,不少项目还是有地址的填写需求,根据支付宝小程序现有提供的组件以及api,完全是可以实现填写地址的需求,比如分别获取省市区,通过地图来获取地址等,但是 ...

  8. php地址选择插件,微信小程序中关于三级联动地址选择器的实例分享

    本文介绍了微信小程序三级联动地址选择器的实例代码,分享给大家,有需要的可以一起了解一下 在一些电商类的小程序中,地址选择这个功能一般是必备的,一般的收货信息都需要有一个能选择省市县的控件,当然也有些人 ...

  9. Android地址选择器的实现

    最近在做地址管理的功能,新建地址的时候,需要根据后台提供的省市区的数据,让用户进行地址的选择,最近项目比较赶,本来想网上找一个的,可是找了很久都没找到我想要的效果,所以就根据后台提供的数据,弄了一个. ...

最新文章

  1. mysql 单表卡死
  2. 开发者狂喜!微信小程序文档和工具放出
  3. Get请求参数中文乱码问题整理
  4. 山山的数学(困难版)
  5. Windows安装zookeeper和kafka
  6. Ti杯电子竞赛前期准备工作
  7. 在ourdev上看的一个帖子
  8. 【转】常用的版本控制软件
  9. Android日常开发问题总结:这些问题火候不够,随时变成删库跑路!
  10. 大连英语培训商务英语百家外语当今社会学习商务英语的重要性
  11. 方倍工作室微信相关代码下载方法
  12. Springboot就业招聘信息系统x8y1g计算机毕业设计-课程设计-期末作业-毕设程序代做
  13. 洛谷P4942 小凯的数字
  14. WebRequest、WebResponse的使用示例
  15. 分享一下我的一些学习方法
  16. C-means聚类算法实战 — 地表植被分类/数字聚类
  17. 西门子哪款plc支持c语言,西门子PLC三种语言的区别
  18. phpexcel的读取和导出
  19. 孙青椒排版八法 和 黄金分割0.618法则和构图法
  20. 计算机网络国培总结,国培数学研修总结

热门文章

  1. 降本增效——券商们为什么必须布局小程序?
  2. java计算机毕业设计的流浪动物救助平台的设计与实现源程序+mysql+系统+lw文档+远程调试
  3. grains和pillar
  4. 腾讯云服务器云硬盘有哪些类型可供选择?
  5. python批量图像处理_python数字图像处理(6):图像的批量处理
  6. Python之登录淘宝
  7. CRM管理系统如何选型?分别有什么作用?
  8. CSS基本知识点——带你走进CSS的新世界
  9. 鼎捷软件:“数字化转型”喧嚣下,企业管理者们需要冷思考
  10. 职场工具:SMART、PEST、PDCA、SWOT、四象限、二八法则