-
Notifications
You must be signed in to change notification settings - Fork 5.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
4.0.0版本onBindViewHolder(@NonNull QuickViewHolder holder, int viewType, @Nullable T item)可空修改 #3793
Comments
尝试修改的过程中,发现了很多问题,例如 |
在BaseQuickAdapter里声明的items我看是emptyList(),问题多应该是从开始设计的时候就把它设计成可空,而用到的地方又太多到导致的吧。 |
我在修改为非空的时候,发现先改BaseQuickAdapter类之后,再改 BaseSingleItemAdapter就容易很多 |
定义成非空,会丧失灵活性,还是用 除非 items 中的数据和 item 数量是对应的,也就是说 items 必须是有意义的。但是对于某些自定义 Adapter, items 就是无意义的,你可能有不同的内容要手动实现 |
这个不是修改困不困难的问题,而是考虑到更多场景的通用问题 |
实际使用过程中,RecyclerView的item也不会为null的吧,为null直接崩溃这也无所谓吧。 item为null的情况毕竟太少了或者说没有,为了这么点儿需求其他人都要写一堆多余代码不方便吧 |
设置数据之前,开发可以自己将null处理成实体类对象。自己可以实现null的UI表现,而不是靠item为null。 |
你还是没有理解我的意思啊,是自定义 |
也就是说这个null的数据其实不是开发用的,是你用的 ? |
暂时理解不了,能把onBindViewHolder回调的数据非空最好,我和大多数人没有可空的需求。 |
不是我用,基类里 |
|
这涉及到理解误差了吧,position == 0我希望获取到的肯定是我传的list的第一个数据,而不是那个header,我获取header干啥 |
在Base里,我只管去数据,至于数据是啥,我也不清楚,那是业务上的。在讨论的例子中,header 不在 items 里,那作为基类咋知道呢。那这段代码该怎么改?请赐教 final override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is EmptyLayoutVH) {
holder.changeEmptyView(emptyView)
return
}
onBindViewHolder(holder as VH, position, getItem(position))
} |
还有个例子,Adapter 显示空布局的时候,这里也会拿到 null |
我可算大概了解你说的什么了,这是设计问题吧,添加的头布局脚布局空布局怎么还能跑到这个回调里去了,这个回调是给adapter显示数据用的啊。 |
这个代码也不需要改呀,它本身就是非空的,可空的也没回调呀。这里的getItem(posttion)又不会是null |
哎~你还是没明白,算了。 再一个,这个本身没啥问题,使用方写一个 |
肯定不优雅啊,谁喜欢加这种本来不需要的代码,哪有人会把rv的item搞成null的,你也先别急着拒绝,之后总有办法改。 有没有明白取决于我们想不想明白,我们只是不明白你为什么把绘制item回调搞成可空。 我们不在乎你框架的限制,限制的可空那是你框架的问题,我们只想回调的时候不可空。 |
如果说回库的设计。如果要做到完美,那就只能用系统的 api 了 fun onBindViewHolder(holder: ViewHolder, position: Int) 只给出 此项目为了方便,提供了 list ,做了一层包装,去取出了 list 多给到了一个 item: fun onBindViewHolder(holder: ViewHolder, position: Int, item: T?) 这种带来了某种便利,但是本身也会丧失一定灵活性。如果处理的数据不来自 list 里,那这里的封装就是多余的,提供的 item 也是无意义的,必定是 null 的 |
那你大可不必纠结,直接用系统的 |
灵活性建立在方便性之上的,它本身如果不方便的话,何谈灵活性啊。 |
兄弟 群可以拉我一下吗 新手想跟大佬们学习 我v:anihczs |
提供一个还算优雅的方案,单独处理需要null的情况,同时为头内容和尾以及空布局等case提供默认item为空的 SimpleSingleItemAdapter |
关于其中的item参数,在4.0.0版本上变成可空了,是否可以改回非空,以前讨论过这个问题 。
#3001
The text was updated successfully, but these errors were encountered: