DownLoad模块 (五)

134 篇文章 0 订阅
87 篇文章 1 订阅
DownLoad模块 (五)

DownloadItemView代表DownloadFragment上每一个Download对应的View,展示该Download的进度,状态,名称等信息。
设计为base abstarct class。
DownloadItemView直接extends LinearLayout, 又承担一部分的C,实现<其实是其非abstarct子类实现>了onClickListener和 onLongClickListener.

<1> DownloadItemView内会维护一个Download(M)的引用,这是必须的,两者天然联系, 互相影响, 不过可以是空.

<2> DownloadItemView 有两种状态,Normal和InEdit,状态切换由外部出发,并且会更新相应子View

<3> DownloadItemView 内含很多View, view的是否可见根据 当前状态决定。

<4> 在构造DownloadItemView时,就会通过layoutInflater.inflate(layout<此layout的root是relativeLayout>, this, true)来将inflate出来的View直接加入到该DownloadItemView<LinearLayout>中.然后就是找到内部各个子view的引用并保存,为以后更新V。

<5> DownloadItemView被设计为 可以set DownLoad, DownloadItemView可以不一直绑定一个Download,可以通过setter来换,
在更换了Download以后,要更新相关的View<典型的M 通过 C 影响 V>

<6> override了setSelected方法<在InEdit模式下>,更新某些V.<外部操作 通过 C 影响 V>
同样相对的override了isSelected()。

<7> 一个重要的抽象方法 updateByStatus(), 不同的子View可以选择自己的update View的方式,基类只是将相关的子View引用以及M相关
信息的获取实现,至于大部分如何更新View的逻辑<C>,则交给了子View来实现。

<8>通过Download中的信息<M>来获取Icon更新ItemView上的ImageView<V> (M -> V)

<9>该abstract class 实现的一个操作V的方法是 设置当前的 progress状态<这一部分逻辑是通用的,因此放在基类中>,该函数也是琐碎的一堆View状态设置逻辑.

<10> trivial:
(1) DownloadItemView的一个浪费在于它多套了一层LInearLayout,在构造时,inflate出来的view理论上将已经足够,但是有被add到了extends自LinearLayout的DownloadItemView中,多了一层LInearLayout,不得不这么做的原因是,DownloadItemView是不断动态生成的,
虽然inflate可动态的生成View,但是也只能生成一个View,这个特有的view的一些逻辑不可能封装在layout的xml文件里面,因此只能通过
这种多套一层的方式将 逻辑封装 和 灵活生成 同时实现. 还是可以接受的, 而这也是android 提倡Fragment的一个原因,但是显然,我们在
这里使用Fragment是不合适的。
还有一种办法: 这个类的逻辑和实现保持不变,只不过要做一个新的layout xml文件,其rootView就是该view,然后直接包裹各种子view<不要使用include,否则还是多一层>。但是这样做的话,就要求DownloadItemView必须是一个可以实例化的类,而其扩展子类也要定义layout xml,根本不能满足这里的需求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值