【问题标题】:how to access MediaPlayer on ViewHolder from outside method如何从外部方法访问 ViewHolder 上的 MediaPlayer
【发布时间】:2021-08-12 06:34:31
【问题描述】:

我像这样在 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。谁能帮我?请!

祝大家有美好的一天!

【问题讨论】:

    标签: java android android-mediaplayer


    【解决方案1】:

    像这样将其设为静态,以便在每个类中都可用

      public static  MediaPlayer mediaPlayer;
    

    【讨论】:

    • 问题是我无法在适配器上初始化它。
    • 你可以创建它的活动并在你想要的地方初始化
    【解决方案2】:

    将 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,这样就可以从适配器中访问了。

    【讨论】:

    • 我之前尝试过,但是当我在适配器中调用 MediaPlayer 时。当我刷它时,它开始播放旧音乐,而不是更新音乐。我把它放在 Viewholder 中,然后我就完美地工作了,我不知道为什么?
    猜你喜欢
    • 2018-02-22
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多