翻译版:逃离 adapter 的地狱—针对多个 View type 的组合实现方案
原版:JOE'S GREAT ADAPTER HELL ESCAPE
关于 ItemDelegate
ItemDelegate 是一个从 AdapterDelegates fork 出来的项目,对于 AdapterDelegates 来说改动不大,但是**上的理解和 sockeqwe 有些不同。
我认为 ItemDelegate 是一种 Item 的代理,他将处理所有 Item 的事情,比如 onCreateViewHolder()
,onBindViewHolder()
,getItemId()
甚至 getSpan()
,所以我一些名字改了,并且把包名改了,以免和 AdapterDelegates 冲突。
- 为
ItemDelegate
增加了getItemId()
,这算是原作者 sockeqwe 忽略的一个方法,主要配合 setHasStableIds(boolean hasStableIds) 使用。 - 为
ItemDelegate
增加了getSpanSize()
方法,主要配合 GridLayoutManager 使用,实现更为复杂的布局。
以上就是目前最为核心的改动,其他都是一些细节,如方法名,参数名。
-
增加 jitPack 到你的 repositories
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
-
添加依赖关系
dependencies { compile 'com.github.YeungKC:ItemDelegate:4.4.0' }
请查看 Demo