Bento是一个用以搭建模块化设计Android用户页面的开源框架,由Yelp产品研发。在过去的一年中,研发人员早已看到了在最重要的模块化设计UI开发设计上应用Bento能够提升开发者的工作效能和设计产品的协调能力。在本文中,研发人员将详尽表述Bento的原理,及其Yelp开源系统Bento Android架构,用以模块化设计UI开发设计的内情。
什么叫Bento?
Bento桌面上的信息内容以信用卡的方式展现给用户,从未接来电到截屏提示,从音乐播放到日历行程安排。得到受权后,Bento会置入手机联系人、日历、Email、访问搜索记录和音乐播放纪录等,记牢用户的一些基本资料和本人爱好,在下一次用户开展一些姿势的情况下,立即向云服务器传送数据随后给予相对意见反馈,用户乃至不用专业免费下载相对的 App 。Bento的另一大闪光点是,这款第三方 Launcher 还含有强烈推荐作用。从用户访问爱好或潜在性要求考虑,出示强烈推荐类服务项目的运用有很多,例如Google Now(它是Google在I/O开发人员交流会上随安卓4.1系统另外发布的一款运用,它会全方位掌握你的各种各样习惯性和已经开展的姿势,并运用它所掌握的来给你出示基本信息)。但与他们不一样的是,Bento全部服务项目全是在订制化的手机界面进行的,这类平台式的作用触发器原理立即决策了用户应用手机上的 *** 。
因此 ,Yelp的开发者用Bento品牌形象地指令了这一架构。 Bento的字面意思是便当的意思,说白了,Bento架构便是要随时随地便捷用户。Bento盒说白了便是一个配有各种各样隔开设备的器皿,用以将不一样的“美味可口”相互分离。
很多Android应用软件都是有一个根据列表的用户页面,应用RecyclerView来表明程序流程的视图。RecyclerView是support:recyclerview-v7中出示的控制,最少兼容到android 3.0版本号。RecyclerView是一种类似ListView的一个拖动列表,可是RecyclerView和ListView对比,RecyclerView比ListView更强,RecyclerView适用横着拖动,RecyclerView沒有点击事件,必须自身添加,还能够作出各种各样酷炫的实际效果动漫,更合乎高内聚力低耦合。
在更底层等级上,RecyclerView根据引入井然有序的数据信息列表并在显示屏上为该列表中的每一个数据项建立视图来工作中。假如你的列表由同质性数据信息类构成,那麼这类方式十分合理。可是如果你必须在列表中管理 *** 无尽总数的数据信息和视图类时,这类方式的缺点就曝露出来。假如你必须在除RecyclerView以外的用户页面中应用同样的视图类(比如ViewPager或ListView),这类方式也会不太好用。
Bento被设计方案出去的目地,便是致力于根据出示一个架构来管理 *** 解决不一样视图类的多元性及其列表中每一个视图的动态性部位来处理之上出現的难题。 Bento还可用以管理 *** 别的父视图类(比如ViewPagers和ListViews)中的视图,但另外Bento也保存了RecyclerView的优点(如ViewHolder和视图收购 )。
Bento怎样运作?
Bento将不一样的视图类和与表明这种视图类并与之互动的逻辑性排序到“组件”中,组件能够是以简易文字视图到由别的组件构成繁杂组件。
组件的关键是出示数据项的单独原素,关系的ComponentViewHolder类将使视图持续inflate化并将出示的数据项关联到繁杂的视图中。ViewHolder一般 还会继续将组件或一些presenter关联到视图,以解决一切用户互动。
为了更好地演试组件的原理,我能在下面列举 要表明在显示屏上的组件的数据流分析数据图表。
1.更先,底层页面视图必须表明內容,因而它规定ComponentController展现一个视图。
2.ComponentController必须将升级的视图回到到底层页面视图,因而,根据控制板维护保养的內部组件列表,它根据在网页页面视图必须的部位对列表中的组件启用getHolderType来建立一个新的ComponentViewHolder。此方式会回到ComponentViewHolder类,随后根据反射面实例化此类。
3.因为它是组件之一次建立视图,因而必须对合理布局开展inflate化解决。 因此,ComponentController必须在新创建的ComponentViewHolder上启用inflate方式来建立视图。
4.下面,研发人员必须应用数据信息添充视图,并保证它将对用户键入做出回应。在建立的ComponentViewHolder案例上启用bind方式,该方式出示了一个数据项和一个presenter。他们是根据启用相对组件的getPresenter和getItem方式的ComponentController形成的。presenter是实行一些领域模型或解决用户互动的一切目标。在很多状况下,它是Component类自身。数据项一般 是一个数据信息类,在其中包括要表明给用户的视图特性和字符串数组。
5.视图将应用数据项开展升级,而且恶性事件侦听器将关联到presenter,随后将视图传送回要展现的底层页面视图。
组件在父亲视图中的次序由ComponentController决策,而这恰好是Bento盒中的奇妙之处,它容许研发人员动态性地为订单信息加上、删掉和 *** 组件,这如同在一个简易的列表算法设计中实际操作一样。它还出示了一个抽象概念实际操作,研发人员能够应用它来将此作用运用于不一样的视图类,比如RecyclerView,ListView,ViewPager和别的很多别的类。比如,recoverclerviewcomponentcontroller解决与recoverclerview类和电源适配器通讯的繁杂编辑,以明确跨距和部位,促使在列表中管理 *** 不一样的组件集越来越比较简单。研发人员还能够应用ComponentGroup建立不一样组件的排序,以将组件的逻辑性排序储存在列表中。
Bento架构能够轻轻松松地将繁杂的页面溶解为一组便于了解、模块化设计、动态性和可检测的组件。
实际实例
让研发人员看一个怎样搭建一个只展现一些文字的更底层组件的实例,下边是一个比较简单的Component类的实例:
class ExampleComponent(private val text: String): Component(){
override fun getCount()=1
override fun getPresenter(position: Int)=this
override fun getItem(position: Int)=text
override fun getHolderType(position: Int)=ExampleViewHolder::class.java
}
在图中中,你能见到在其中早已遮盖了抽象性组件类的一些方式。让研发人员来讲解一下在其中的每一个方式:
1.getCount:组件能够在內部由一系列项构成,在之上的简易实例中,在其中就只有一个新项目。假如必须,每一个部位的组件中的每一个新项目都能够有着自身的presenter、数据项和ViewHolder类,但一般 更好是将其溶解为不一样的组件,除非是全部新项目都具备同样的ViewHolder和presenter。
三月以来,政府频繁发布各种财政、货币手段促进经济回温,股市随之大涨,消费市场也逐渐乐观起来;诸如“2020消费品牌如何逆袭”、“报复性消费如何引爆”等等自媒体文章,随处可见。 那么,“报复性消费”是...
追随着夏季的步伐,向春季说一句再见了。夏季立刻到,可是我都还没准备好和2018年的春季说一声再见。夏季来的始料不及。2018春季再见了的早安心语说说微信朋友圈,再见春天迎来夏季的说说句子 春季再...
相信现在有很多的朋友们对于有房产证能够补办土地使用权吗都想要了解吧,那么今天小编就来给大家针对有房产证能够补办土地使用权吗进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 土地证有使用年限和土地...
找高手黑客当面交易相关问题 黑客怎么进去一个系统相关问题 什么叫黑客挖矿 逆向和渗透哪个赚钱(正向交易和逆向交易)...
现在在农村种植最普通的农作物,比如小麦、玉米、大豆等,这些都不是很挣钱,所以很多农民便开始种植树木,那现在种什么树比较好呢? 这个主要就是看自己是想快速盈利的,还是作为退耕还林的一个项目。还有自...
在上一篇,小编简单的介绍了如何从全局留存数据,寻找增长线索,本篇将承接上一篇的内容,继续分享一下:如何通过精细化数据分析,近一步寻找留存增长线索。 一、产品流失分析 在分析产品留存前,我们需要先考虑...