首页 > 解决方案 > 如何从外部方法访问 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。谁能帮我?请!

祝大家拥有美好的一天!

标签: javaandroidandroid-mediaplayer

解决方案


让它像这样静态,这样它就可以在每个类中使用

  public static  MediaPlayer mediaPlayer;

推荐阅读