我有一个10个项目的回收视图,每个项目都有一个音频文件。
我想用它们的名字创建media2变量,比如media1,mediaplayer……回收器视图中的中位数
然后在onBindview中,我想使用对应于位置的变量名。
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
mp = media+"position"
mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename));
mp.start();
}
我这样做的原因是,我想让每个项目记住它的mediaplayer变量,这样我就可以只播放那个特定的音频文件,而不是其他项目的音频文件。
另外我发现,当我按下另一个项目的播放按钮时,会播放其他项目的音频。如果我暂停项目[1[音频,并播放另一个items2音频,它将从暂停位置继续播放item1音频。
我无法管理每个项目的音频文件。一切都变得混乱了。
发布于 2016-06-06 12:27:30
为什么你想把它作为动态变量,当你可以很容易地通过mediaplayer的数组来做到这一点。
只需为mediaplayer声明一个数组变量,然后在获取数据时初始化它,然后在viewholder中使用它。
MediaPlayer allMPlayers[];
获取数据后,将其初始化为,
allMPlayers = new MediaPlayer[list.size()];
现在使用in holder,如下所示:
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
mp = allMPlayers[position];
mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename));
mp.start();
}
发布于 2016-06-06 12:16:45
为此,最简单的方法是使用HashMap<String, MediaPlayer>
。因此,您可以通过字符串名称从映射中放入/获取媒体播放器。
编辑:
或者记住RecyclerView.ViewHolder
实现中的MediaPlayer
实例。但要注意持有者的回收利用。
EDIT 2:
要在视图持有者中记住MediaPlayer
实例,可以将其保存在onBindViewHolder
方法中。示例:
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
// First cast to your view holder implementation which has a public instance variable MediaPlayer mediaPlayer;
// Just for easy access of instance variables
MyViewHolder holder = (MyViewHolder)viewHolder;
if (holder.mediaPlayer == null) {
// If there is no MediaPlayer on this view holder create a new one.
holder.mediaPlayer = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename));
mp.start();
}
else {
// Stop playing this media player...
// Re-use the current media player or create a new one...
// Now play the new sound with similar code as in the IF branch above...
}
}
https://stackoverflow.com/questions/37656513
复制