https://blog.csdn.net/Magic1an/article/details/88181145
还是先上效果图,我们在查看小说目录时,可以看到正在阅读的章节字体为红色,其余章节字体为黑色。

主要解决方式来自于 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)吧~
————————————————
版权声明:本文为CSDN博主「Magic1an」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Magic1an/article/details/88181145

修改recyclerview指定位置背景色

这是一个瞎写的小说阅读器,通过点击章节列表(recyclerview)中的选项或者其它方式更新正文文本框内容,并且将章节列表中的相应view设置为红色背景(R.color.colorAccent)。

holder.chapterName是一个文本框,内容为章节名称;

holder.chapterView是holder.chapterName + 一条下划线,基本上算是同一个View

因为改变章节的方式并不只是点击,所以修改方法不在onClick方法里写。

在adapter里添加一个触发修改的方法,由外部调用(getContent方法内包含接口方法,即使点击也一样),将当前章节名称(默认不重复)和该章节在章节列表中的位置传入后再调用notifyItemChanged方法,这样就会触发onBindViewHolder。

在onBindViewHolder里判断recyclerview中的文字内容是否和当前章节名称相同,如果相同就设置为红色背景,并将lastSelectedView设置为这个view;如果不同就设置为天蓝色背景。

在每次触发onBindViewHolder时,当recyclerview中的文字内容和当前章节名称相同,如果lastSelectedView和这个view不是同一个view,说明当前章节变了,需要先把lastSelectedView的背景设置成天蓝色,再将当前view设置为红色背景,将lastSelectedView设置为这个新的view。

ps:在onBindViewHolder里如果根据position而不是章节名来设置的话,会出现这种问题:选中的章节item会变红,但是列表上下滑动会发现还有别的章节item也变红了。

@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chapter_item, parent, false);final ViewHolder holder = new ViewHolder(view);holder.chapterView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {getContent(holder.getAdapterPosition());drawerLayout.closeDrawer(GravityCompat.START);}});return holder;}public void selectItem(int position, String selectedChapter) {this.selectedChapter = selectedChapter;notifyItemChanged(position);}private String selectedChapter;private View lastSelectedView;@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {String chapterName = mNovelInfo.ChapterNameList.get(position);holder.chapterName.setText(chapterName);if (chapterName.equals(selectedChapter)) {if (lastSelectedView != null && lastSelectedView != holder.chapterName) {lastSelectedView.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.skyblue));}holder.chapterName.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.colorAccent));lastSelectedView = holder.chapterName;} else {holder.chapterName.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.skyblue));}}

简单来说,就是把上一个变色的view保存下来,需要变化的时候调用notifyItemChanged(int position)方法,并在onBindViewHolder里判断这个view和保存的view是否是同一个view,如果是就不用变,如果不是就把保存的view颜色设置为普通的颜色,把当前view设置为特殊颜色。
————————————————
版权声明:本文为CSDN博主「qq_34882161」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34882161/article/details/54944188

设置RecyclerView某Item背景色相关推荐

  1. android layoutinflater 高度,探究LayoutInflater和RecyclerView中item设置宽高无效

    1. LayoutInflater是做什么的 Instantiates a layout XML file into its corresponding {@link android.view.Vie ...

  2. Android中设置RecyclerView的每一个item的单项点击事件

    场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  3. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件

    1. 引言: RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一 ...

  4. RecyclerView复用item导致数据混乱

    一般recyclerview会复用item以让recycler性能提升 但是我们有些时候会出现复用了之后混乱的情况 如何防止RecyclerView复用item呢 1 最好是每一个有判断的地方,都要写 ...

  5. android recyclerview 横向item 宽度,RecyclerView的item宽度不能全屏显示及线性布局与grid布局切换混乱解决方法...

    1.RecyclerView的Item宽度不能全屏显示 出现这种的原因有两种: 1.第一种是在adapter中加载inflater时parent传入为null 2.如果第一种不行,第二种原因就是在Re ...

  6. 界面无小事(八):RecyclerView增删item

    界面无小事(一): RecyclerView+CardView了解一下 界面无小事(二): 让RecyclerView展示更多不同视图 界面无小事(三):用RecyclerView + Toolbar ...

  7. RecyclerView 刷新Item图片闪烁

    RecyclerView 刷新Item图片闪烁 在项目开发过程中,我们可能会用到RecyclerView来加载列表数据.而数据又离不开需要加载图片. 我们在加载图片的框架时,常用的也是glide pi ...

  8. RecyclerView实现Item可拖拽(拖动、删除)

    RecyclerView实现Item可拖拽(拖动.删除) 话不多说,先附上效果图: ItemTouchHelper 这是一个RecyclerView的工具,提供了drag & swipe 的功 ...

  9. RecyclerView实现Item居中效果(仿猫眼美团电影选择效果)

    一.实现的效果 1.滑动的时候让每一个Item保持在中间 2.点击某一个Item让其滚动到中间 3.实际实现的效果如下:点击一次自动滚动居中,再次点击跳转到详情页 二.实现的思路: 1.每一次的滑动都 ...

最新文章

  1. Linux文件合并去重
  2. grunt 打包前端代码
  3. Spring配置文件详解三:Spring声明式事务管理
  4. 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)
  5. boost::endian模块实现reverse的测试程序
  6. sphinx全文检索功能 | windows下测试 (二)
  7. 腾讯视频怎么设置全速下载模式
  8. Axure RP chrome插件显示已损坏或者无法安装的解决方法
  9. potplay显示服务器关闭,PotPlayer怎么关掉左上角显示的播放时间?PotPlayer关掉左上角显示播放时间的操作步骤...
  10. (30)SPI接口调试丢数据解决(FPGA不积跬步101)
  11. Angular2之路由学习笔记
  12. php计算数字的立方,玩疯了!这回是人类发现了把3写成3个整数立方和的第3种写法!...
  13. 未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
  14. Ubuntu GCC编译器升级
  15. matlab实现S函数的五种方式
  16. 实现了一个跨平台的 YUV 文件图片查看器
  17. 自抗扰控制器-2.非线性状态误差反馈控制律 NLSEF
  18. 自然辩证法对计算机科学技术的应用,自然辩证法与计算机科学技术
  19. 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
  20. macOS Mojave(软件篇):微信 for Mac 防撤回插件(WeChatTweak-macOS)

热门文章

  1. The Apache Way - 开源项目
  2. 计算机网络技术课程答案网课,《计算机网络技术》大学生网课答案.docx
  3. 数据结构与算法(C语言版)----运动会管理系统
  4. Python之字符串源码解析
  5. Android解决输入法自动弹出方法大全
  6. 如何使用微信、支付宝提现免手续费
  7. 原创丨嵌入式IMX6ULL学习指引-四大要点-简单也实用
  8. DoT/DoH/DoQ 之 CoreDNS配置
  9. 计算机术语写祝福语,祝福语精选
  10. 红帽linux安装打印机教程,RHEL5下安装纯文本打印机试验步骤记