首页 > 解决方案 > 如何将回收站视图的全部内容刷新为默认值,包括它们所在的图标,但当前位置除外

问题描述

我有一个应用程序,在单击某个项目时,我将在适配器的视图中更新背景图像。但是,我想这样做,当我单击一个项目时,所有其他项目都恢复为默认图像(有点像切换回)。假设我在项目 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中的所有其他项目刷新为默认值。知道如何以最简单的方式解决这个问题吗?谢谢!

标签: androidandroid-recyclerviewandroid-imageandroid-viewholderandroid-background

解决方案


在你的 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 视图,但只会更新先前选择的项目以将其状态更改为未选择,并且当前项目也将处于活动状态。

希望这可以帮助 :)


推荐阅读