如何从外部方法访问ViewHolder上的MediaPlayer



我在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;

最新更新