java - 如何从外部方法访问 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();
}
}
});
}
}
但我想在 Activity 上的 CardView 刷卡时停止它。所以我创建了一个可以从活动调用的方法
public void stopMediaplayer() {
//I don't have idea to get MediaPlayer on ViewHolder
}
当我使用时,我只是在 Activity 上调用它
@Override
public void onCardSwiped(Direction direction) {
adapter.stopMediaplayer();
}
但我不知道在外面访问 MediaPlayer。谁能帮我?请!
祝大家拥有美好的一天!
解决方案
让它像这样静态,这样它就可以在每个类中使用
public static MediaPlayer mediaPlayer;
推荐阅读
- c# - 合并 context.ObjectStateManager.GetObjectStateEntries 中的更改
- python - sqlite3.InterfaceError:错误绑定参数 0 - 可能不支持类型:当我知道类型是整数时
- c - 将文件输出定向到控制台
- java - 我试图召回第 8 行的输出,但仍然有问题
- swift - 当列表没有项目时强制视图卸载或不显示
- facebook - Facebook Graph API - 获取公共事件
- javascript - 如何在ejs中将列表拆分为不同的页面
- url - 是否可以将数据添加到不会发送到服务器的 URL?
- java - 跨多个环境共享配置或属性
- java - GenerationTarget 遇到异常接受执行 DDL 时出错