美文网首页
recyclerview 使用问题记录

recyclerview 使用问题记录

作者: 有点健忘 | 来源:发表于2018-05-16 10:48 被阅读5次

有数据却显示空白

今早测试代码碰到个奇怪的问题
我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。

相关文章

网友评论

      本文标题:recyclerview 使用问题记录

      本文链接:https://www.haomeiwen.com/subject/tpaudftx.html