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

前端之家收集整理的这篇文章主要介绍了android – Recyclerview视图可以更改其他适配器位置(不是当前位置)的视图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有媒体播放器的回收者视图,可以在每一行上播放一首歌.我只有一个播放/停止按钮,可以改变符号.

这是我的问题:

示例1(这很好):

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

例2(这是问题)

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

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

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

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

  1. class AddVideoAudioViewHolder extends RecyclerView.ViewHolder{
  2.  
  3. ImageView PlayButton;
  4. Button AddAudioButton;
  5. TextView Title;
  6. public AddVideoAudioViewHolder(View itemView) {
  7. super(itemView);
  8.  
  9. PlayButton = (ImageView) itemView.findViewById(R.id.PlayStopAudioDemo);
  10. PlayButton.setTag(1);
  11. PlayButton.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14.  
  15. int PlayStopButtonState = (int) PlayButton.getTag();
  16.  
  17. if (PlayStopButtonState == 1) {
  18. mVideoAudioCallbacks.onClick(100 + getAdapterPosition());
  19. PlayButton.setImageResource(R.drawable.playstop);
  20. PlayButton.setTag(2);
  21.  
  22. } else {
  23.  
  24. mVideoAudioCallbacks.onClick(200 + getAdapterPosition());
  25. PlayButton.setImageResource(R.drawable.playarrow);
  26. PlayButton.setTag(1);
  27. }
  28.  
  29.  
  30. }
  31. });

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

  1. public void PlaySong (int SongNumber,int ObjectInt){
  2.  
  3.  
  4. if (mp == null) {
  5.  
  6. mp = new MediaPlayer();
  7.  
  8. }else{
  9. mp.reset();
  10. }
  11.  
  12. try {
  13. mp.setDataSource(this,Uri.parse("android.resource://com.example.nick.accountable/" + SongArray[SongNumber]));
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. try {
  18. mp.prepare();
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. mp.start();
  23.  
  24.  
  25.  
  26. }

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

谢谢你的帮助
尼古拉斯

解决方法

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

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

  1. PlayButton.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4.  
  5. int PlayStopButtonState = (int) PlayButton.getTag();
  6.  
  7. int prevIoUsPosition = mCurrentPlayingPosition;
  8. if (PlayStopButtonState == 1) {
  9.  
  10. mCurrentPlayingPosition = getAdapterPosition();
  11.  
  12. mVideoAudioCallbacks.onClick(100 + getAdapterPosition());
  13. PlayButton.setImageResource(R.drawable.playstop);
  14. PlayButton.setTag(2);
  15.  
  16. } else {
  17. mCurrentPlayingPosition = -1; // nothing wil be played after hitting stop
  18. mVideoAudioCallbacks.onClick(200 + getAdapterPosition());
  19. PlayButton.setImageResource(R.drawable.playarrow);
  20. PlayButton.setTag(1);
  21. }
  22.  
  23. if(prevIoUsPosition != -1)
  24. notifyItemChanged(prevIoUsPosition);
  25.  
  26. }
  27. });

在您的onBindViewHolder中执行以下操作

  1. @Override
  2. public void onBindViewHolder(AddVideoAudioViewHolder holder,int position) {
  3. if(mCurrentPlayingPosition == position ){
  4. // display stop icon
  5. } else {
  6. // display play icon
  7. }
  8. }

猜你在找的Android相关文章