android – Recyclerview视图可以更改其他适配器位置(不是当前位置)的视图?

android – Recyclerview视图可以更改其他适配器位置(不是当前位置)的视图?,第1张

概述我有一个带有媒体播放器的回收者视图,可以在每一行上播放一首歌.我只有一个播放/停止按钮,可以改变符号. 这是我的问题: 示例1(这很好): (对于适配器位置1),用户点击播放符号并播放该适配器位置的音乐,符号变为停止符号,然后点击停止符号,音乐停止,符号变回准备启动的播放符号音乐又来了. 例2(这是问题) (对于适配器位置1),用户点击播放符号并播放该适配器位置的音乐,并且符号变为停止符号.如果没 我有一个带有媒体播放器的回收者视图,可以在每一行上播放一首歌.我只有一个播放/停止按钮,可以改变符号.

这是我的问题:

示例1(这很好):

(对于适配器位置1),用户点击播放符号并播放该适配器位置的音乐,符号变为停止符号,然后点击停止符号,音乐停止,符号变回准备启动的播放符号音乐又来了.

例2(这是问题)

(对于适配器位置1),并且符号变为停止符号.如果没有再按下该按钮,他们就会点击播放符号(适配器位置3),所以现在他们正在尝试同时播放位置1和3上的歌曲.我已经修复了两首歌曲同时播放,以便当按下第二首歌曲时,播放的媒体被重置,源歌曲文件被改变为新歌曲(一次只播放一首歌曲).

即使媒体播放器表现得如此,问题仍然存在.媒体播放器在主要活动中受到控制.播放/停止按钮(imagevIEw)图像在适配器视图中更改,当同时单击多首歌曲时,我无法改变播放/停止符号的方法.

此图像显示了按下歌曲1和歌曲3的示例.现在只播放第3首歌曲,但图像仍然显示两首歌曲同时播放.

这是我的视图持有者,我处理更改播放/停止图像并发送歌曲点击回调:

class AddVIDeoAudioVIEwHolder extends RecyclerVIEw.VIEwHolder{    ImageVIEw Playbutton;    button AddAudiobutton;    TextVIEw Title;    public AddVIDeoAudioVIEwHolder(VIEw itemVIEw) {        super(itemVIEw);        Playbutton = (ImageVIEw) itemVIEw.findVIEwByID(R.ID.PlayStopAudioDemo);        Playbutton.setTag(1);        Playbutton.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                int PlayStopbuttonState = (int) Playbutton.getTag();                if (PlayStopbuttonState == 1) {                    mVIDeoAudioCallbacks.onClick(100 + getAdapterposition());                    Playbutton.setimageResource(R.drawable.playstop);                    Playbutton.setTag(2);                } else {                    mVIDeoAudioCallbacks.onClick(200 + getAdapterposition());                    Playbutton.setimageResource(R.drawable.playarrow);                    Playbutton.setTag(1);                }            }        });

这是我在主要活动中处理两首歌曲播放情况的方法:

public voID PlaySong (int SongNumber,int ObjectInt){    if (mp == null) {        mp = new MediaPlayer();    }else{        mp.reset();    }    try {        mp.setDataSource(this,Uri.parse("androID.resource://com.example.nick.accountable/" + SongArray[SongNumber]));    } catch (IOException e) {        e.printstacktrace();    }    try {        mp.prepare();    } catch (IOException e) {        e.printstacktrace();    }    mp.start();}

所以我的问题是我可以在视图持有者或主活动中添加一些代码,这些代码可以更改除当前适配器位置之外的所有其他视图.即如果单击歌曲编号3进行播放,请将图像设置为位置1-2& 4-10没有比赛或者有更好的方法.

谢谢你的帮助
尼古拉斯

解决方法 在你的适配器中有一个int变量来保持正在播放的位置
int mCurrentPlayingposition = -1; // if -1 nothing is playing

在点击监听器的播放按钮中,执行此 *** 作

Playbutton.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                int PlayStopbuttonState = (int) Playbutton.getTag();                int prevIoUsposition = mCurrentPlayingposition;                if (PlayStopbuttonState == 1) {                    mCurrentPlayingposition = getAdapterposition();                    mVIDeoAudioCallbacks.onClick(100 + getAdapterposition());                    Playbutton.setimageResource(R.drawable.playstop);                    Playbutton.setTag(2);                } else {                    mCurrentPlayingposition = -1; // nothing wil be played after hitting stop                    mVIDeoAudioCallbacks.onClick(200 + getAdapterposition());                    Playbutton.setimageResource(R.drawable.playarrow);                    Playbutton.setTag(1);                }                if(prevIoUsposition != -1)                    notifyItemChanged(prevIoUsposition);            }        });

在您的onBindVIEwHolder中执行以下 *** 作

@OverrIDepublic voID onBindVIEwHolder(AddVIDeoAudioVIEwHolder holder,int position) {    if(mCurrentPlayingposition == position ){       // display stop icon    } else {       // display play icon    }}
总结

以上是内存溢出为你收集整理的android – Recyclerview视图可以更改其他适配器位置(不是当前位置)的视图?全部内容,希望文章能够帮你解决android – Recyclerview视图可以更改其他适配器位置(不是当前位置)的视图?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1130557.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存