设置RecyclerView某Item背景色
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背景色相关推荐
- android layoutinflater 高度,探究LayoutInflater和RecyclerView中item设置宽高无效
1. LayoutInflater是做什么的 Instantiates a layout XML file into its corresponding {@link android.view.Vie ...
- Android中设置RecyclerView的每一个item的单项点击事件
场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...
- Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
1. 引言: RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一 ...
- RecyclerView复用item导致数据混乱
一般recyclerview会复用item以让recycler性能提升 但是我们有些时候会出现复用了之后混乱的情况 如何防止RecyclerView复用item呢 1 最好是每一个有判断的地方,都要写 ...
- android recyclerview 横向item 宽度,RecyclerView的item宽度不能全屏显示及线性布局与grid布局切换混乱解决方法...
1.RecyclerView的Item宽度不能全屏显示 出现这种的原因有两种: 1.第一种是在adapter中加载inflater时parent传入为null 2.如果第一种不行,第二种原因就是在Re ...
- 界面无小事(八):RecyclerView增删item
界面无小事(一): RecyclerView+CardView了解一下 界面无小事(二): 让RecyclerView展示更多不同视图 界面无小事(三):用RecyclerView + Toolbar ...
- RecyclerView 刷新Item图片闪烁
RecyclerView 刷新Item图片闪烁 在项目开发过程中,我们可能会用到RecyclerView来加载列表数据.而数据又离不开需要加载图片. 我们在加载图片的框架时,常用的也是glide pi ...
- RecyclerView实现Item可拖拽(拖动、删除)
RecyclerView实现Item可拖拽(拖动.删除) 话不多说,先附上效果图: ItemTouchHelper 这是一个RecyclerView的工具,提供了drag & swipe 的功 ...
- RecyclerView实现Item居中效果(仿猫眼美团电影选择效果)
一.实现的效果 1.滑动的时候让每一个Item保持在中间 2.点击某一个Item让其滚动到中间 3.实际实现的效果如下:点击一次自动滚动居中,再次点击跳转到详情页 二.实现的思路: 1.每一次的滑动都 ...
最新文章
- Linux文件合并去重
- grunt 打包前端代码
- Spring配置文件详解三:Spring声明式事务管理
- 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)
- boost::endian模块实现reverse的测试程序
- sphinx全文检索功能 | windows下测试 (二)
- 腾讯视频怎么设置全速下载模式
- Axure RP chrome插件显示已损坏或者无法安装的解决方法
- potplay显示服务器关闭,PotPlayer怎么关掉左上角显示的播放时间?PotPlayer关掉左上角显示播放时间的操作步骤...
- (30)SPI接口调试丢数据解决(FPGA不积跬步101)
- Angular2之路由学习笔记
- php计算数字的立方,玩疯了!这回是人类发现了把3写成3个整数立方和的第3种写法!...
- 未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
- Ubuntu GCC编译器升级
- matlab实现S函数的五种方式
- 实现了一个跨平台的 YUV 文件图片查看器
- 自抗扰控制器-2.非线性状态误差反馈控制律 NLSEF
- 自然辩证法对计算机科学技术的应用,自然辩证法与计算机科学技术
- 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
- macOS Mojave(软件篇):微信 for Mac 防撤回插件(WeChatTweak-macOS)