我在Viewholder上创建一个像这样的MediaPlayer
public class ViewHolder extends RecyclerView.ViewHolder {
RoundedImageView imageView;
TextView username;
ImageButton buttonInfo;
MediaPlayer mediaPlayer;
public ViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.itemCardStackView);
username = itemView.findViewById(R.id.textViewUsername_stackView);
buttonInfo = itemView.findViewById(R.id.buttonToInfo_stackView);
}
void setData(Users data) {
mediaPlayer = new MediaPlayer();
if (!data.getAudioIntro().equals("")) {
try {
mediaPlayer.setDataSource(data.getAudioIntro());
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
booleanCallBack.checkAudio(true);
username.setText(data.getUsername());
Glide.with(context).load(data.getAvatar()).into(imageView);
}
});
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!data.getAudioIntro().equals("")) {
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
else {
mediaPlayer.start();
}
} else {
Toast.makeText(context, "No Voice intro", Toast.LENGTH_SHORT).show();
}
}
});
}
}
,但我想停止它当CardView上的活动滑动。所以我创建了一个可以从活动
调用的方法public void stopMediaplayer() {
//I don't have idea to get MediaPlayer on ViewHolder
}
当我使用时,我只是在Activity上调用它
@Override
public void onCardSwiped(Direction direction) {
adapter.stopMediaplayer();
}
但我没有想法访问MediaPlayer外面。有人能帮我吗?拜托!
祝大家今天愉快!
移动ViewHolder类到适配器类。所以它现在是一个内部阶级。那么MediaPlayer必须在适配器类中。把它移到那里
public class Adapter extends BaseAdapter {
MediaPlayer mediaPlayer;
public MediaPlayer getMediaPlayer(){
return mediaPlayer
}
public class ViewHolder extends RecyclerView.ViewHolder{
void setData(Users data) {
mediaPlayer = new MediaPlayer();
}
}
}
现在你可以在适配器中使用mediaPlayer
,这样适配器就可以访问了。
将其设置为静态的,这样每个类都可以使用
public static MediaPlayer mediaPlayer;