设置RecyclerView某Item背景色

还是先上效果图,我们在查看小说目录时,可以看到正在阅读的章节字体为红色,其余章节字体为黑色。

主要解决方式来自于 https://blog.csdn.net/qq_34882161/article/details/54944188,感谢!

思路在于将当前章节的章节名传递给adapter,然后调用notifydata,此时会调用onBindViewHolder重新绘制,我们在这个函数中进行比较,把与传入的章节名相同的ViewHolder的章节名的字体颜色设置为红色,其余字体颜色为黑色。与上篇文章不同的是,这里当我点击其他章节时会关闭RecyclerView,因此我并没有使用lastView记录上一个章节的ViewHolder,只要每次打开RecyclerView时重新传入当前章节名就好了。

if (mBookChapter.equals(holder.tvChapter.getText())){
            holder.tvChapter.setTextColor(mView.getResources().getColor(R.color.colorAccent));
        }else{
            holder.tvChapter.setTextColor(mView.getResources().getColor(R.color.black));;
        }

当我们按照上面写好代码后,可以看到章节名已经变为红色了。但是!当我们上下滑动一段距离然后再滑回来时,会偶尔出现章节名并没有出现改变颜色的情况。我们只需要调用RecyclerView的setItemViewCacheSize设置为0即可了。

directoryView.setItemViewCacheSize(0)

除此之外,我们还可以使用

directoryView.scrollToPosition(mBookIndex)

达到模拟滑动的效果,这样我们每次打开章节列表,就可以看到我们当前正在阅读的章节和周围其他的章节了。不过scrollToPosition只是让这个item滑动到我们可以看到的范围内,并不是使这个item处于最顶端,如果你想让item处于最顶端那就请用scrollToPositionWithOffset(postion, 0)吧~

没有更多推荐了,返回首页