android - 如何将回收站视图的全部内容刷新为默认值,包括它们所在的图标,但当前位置除外
问题描述
我有一个应用程序,在单击某个项目时,我将在适配器的视图中更新背景图像。但是,我想这样做,当我单击一个项目时,所有其他项目都恢复为默认图像(有点像切换回)。假设我在项目 1 上有一个播放按钮,然后单击它,它切换到暂停,然后我单击项目 2,它切换到暂停,项目 1 中的第一个按钮切换回播放按钮。有没有办法在回收者视图中做到这一点?
这是我在 onclick 中的代码:
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
if(!tracks.get(getAdapterPosition()).getMediaUrl().equals(currenturl) ){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = new MediaPlayer();
currenturl = tracks.get(getAdapterPosition()).getMediaUrl();
currentposition = getAdapterPosition();
playAudio(tracks.get(getAdapterPosition()).getMediaUrl());
}
我想更新当前单击的图像,以便
mediaUrl.setBackgroundResource(android.R.drawable.ic_media_pause);
对于当前项目,但恢复为
mediaUrl.setBackgroundResource(android.R.drawable.ic_media_play);
对于上一个单击的项目,或者可以将recycleview中的所有其他项目刷新为默认值。知道如何以最简单的方式解决这个问题吗?谢谢!
解决方案
在你的 recyclerview 适配器 itemselected = "number of current selected item" 中创建变量。在您的 viewHolder 绑定中检查 itemSelectedIndex 并适当地应用样式。
为您要选择某些项目的事件制作 onClickListener。在 onClick 中设置 itemSelectedIndex = "被点击的项目编号"。然后调用(也以相同的方法)notifyDataSetChahged。
这将完成这项工作。notifyDataSetChanged 将使您的 recyclerview 重绘整个项目。而且,由于“已选择”视图也将应用于 itemSelectedIndex 项目,因此其他项目将变为未选中状态。
为了提高此解决方案的性能,您可能需要引入两个索引:itemSelected itemSelectedPrevious。在这种情况下,在 onClick 中执行:
itemSelectedPrevious = itemSelected
itemSelected = "index of current clicked item"
notifyItemChanged(itemSelectedPrevious)
notifyItemChanged(itemSelected)
在这种情况下,您将避免重绘整个 recycleradapter 视图,但只会更新先前选择的项目以将其状态更改为未选择,并且当前项目也将处于活动状态。
希望这可以帮助 :)
推荐阅读
- python - Django tinymce 显示问题
- matlab - 使用简单的欧拉法求解恒星的 EoS (Mathematica)
- c# - 通过公共 IP 地址连接到 C# 套接字
- azure - 增加要在 Azure 数据资源管理器(ADX、Kusto)中引入的最大文件大小
- django - 如何运行 Django 应用程序的多个实例?
- azure - 如何使用 powershell 将 Azure 虚拟网络子网输出到 csv 以进行单个或多个订阅
- hpc - Microsoft HPC 默认作业电子邮件设置/通知
- ios - 在 iOS 上使用 Google Maps/Places SDK 检索城市的地点 ID
- javascript - ReactJS - Child 的 onClick 事件调用父方法,但范围不是我所期望的
- r - 如何绘制具有上限的积分函数作为R中的另一个函数?