【发布时间】:2016-05-19 04:47:54
【问题描述】:
我有一个带有媒体播放器的 recyclerview,可以在每一行播放一首歌曲。我只有一个改变符号的播放/停止按钮。
这是我的问题:
示例 1(效果很好):
(对于适配器位置 1)用户点击播放符号,音乐在该适配器位置播放,符号变为停止符号,然后他们点击停止符号,音乐停止,符号变回播放符号准备好重新开始音乐了。
示例 2(这是问题所在)
(对于适配器位置 1)用户点击播放符号并在该适配器位置播放音乐,并且该符号变为停止符号。无需再次点击该按钮,他们就会点击播放符号(适配器位置 3),因此现在他们正尝试同时在位置 1 和 3 上播放歌曲。我已经修复了两首歌曲同时播放的问题,这样当第二首歌曲被按下时,播放的媒体被重置并且源歌曲文件被更改为新歌曲(一次只能播放一首)。
即使媒体播放器的行为正常,问题也随之而来。媒体播放器在 mainactivity 中被控制。适配器视图中的播放/停止按钮 (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();
}
所以我的问题是我可以在视图持有者或主要活动中添加一些代码,这些代码可以更改除当前适配器位置之外的所有其他视图。 IE。如果点击播放第 3 首歌曲,请将位置 1-2 和 4-10 的图像设置为不播放或有更好的方法。
感谢您的帮助 尼古拉斯
【问题讨论】:
标签: android android-mediaplayer android-recyclerview android-viewholder