有数据却显示空白
今早测试代码碰到个奇怪的问题
我RecyclerView设置了GridLayoutManager,spanCount=5,也设置了adapter,也有数据,我在onBindViewHolder方法里打印发现它也有日志,可是显示出来的却是个空白。
我弄了6条数据,看到空白的高度和2条数据空白的高度明显差一半。这就见鬼了啊。
还好百度搜到一个帖子https://blog.csdn.net/lvshaorong/article/details/52149717
我看了下我item的布局就是match_parent. 而测试机也是6.0的。。。
完事我就在adapter里动态修改了下item的宽度,发现可以显示了,也不知道这是啥奇怪的问题。
不过我又仔细看了下,这个东西是个DialogFragment。代码基本是从activity里copy的,
我activity里也是match_parent,可能正常显示。这就很奇怪了。
我又仔细的看了下代码,我发现我的ItemDecoration
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State?) {
outRect.apply {
this.right=50
this.left=50}}
这个左右都是50,那我spanCount是5,这个总的offSets就500了,而DialogFragment的宽度都没这么多。所以那些item都显示不出来了。我赶紧把上边的left和right都改成10,然后item的布局还是match_parent,发现是可以正常显示的。。
哎,差点就以为是match_parent的问题了,还好又看了一遍。
2 数据局部刷新
重写如下的方法,不用刷新整个item,如果只需要刷新item里的部分view的话
override fun onBindViewHolder(holder: BaseRvHolder, position: Int, payloads: MutableList<Any>) {
if(payloads.isEmpty()){
super.onBindViewHolder(holder, position, payloads)
}else{
//在这里处理需要修改的view
holder.setText(R.id.tv_test,"${payloads[0]}")
}
}
调用方法刷新
//第二个参数是个object,传啥都行,最后都是被放进一个MutableList里去了。所以上边获取数据一定是 payloads.get(0)
adapter.notifyItemChanged(adapterPosition,"")
主要说写可能碰到的问题,如果你使用了第三方的库的adapter,
比如这个动画库jp.wasabeef:recyclerview-animators:2.2.6
不知道叫啥模式,就是包装的性质吧,把我们的adapter传给他的adapter,可问题是他的adapter没有处理3个参数的方法,所以我们自己adapter里写了没任何反应。纠结了好久才注意到我外边还套了一个adapter。
网友评论