繁体   English   中英

不在onCreate中时mediaPlayer.create(this,R.raw.sound)出错

[英]Error with mediaPlayer.create(this, R.raw.sound) when not in onCreate

我正在开发一个基本上是音乐库的应用程序,对于每首歌曲,当你按下按钮播放时,歌曲开始播放。 目前,我的图书馆有3个项目,我正在尝试播放“sound.mp3”,这是res / raw,其中3个(目前)。

我的问题是当我尝试引用剪辑时,我在“this,R.raw.sound”下面有一个红色下划线。 我看到在大多数情况下,在onCreate中调用“create”,但在我的情况下,这个类不是一个活动所以我不能这样做......

你能帮助我吗? :)

    public class ClipsAdapter extends RecyclerView.Adapter<ClipsAdapter.MyViewHolder> {

private final List<Clips> clip2 = Arrays.asList(
        new Clips("Clip 1", "Artist 1"),
        new Clips("Clip 2", "Artist 2"),
        new Clips("Clip 3", "Artist 3")
);

public class MyViewHolder extends RecyclerView.ViewHolder {

    private final TextView title;
    private final TextView author;
    private final ImageView play;

    private Clips currentClip;
    MediaPlayer mediaPlayer = new MediaPlayer();

    public MyViewHolder(final View itemView) {
        super(itemView);

        title = ((TextView) itemView.findViewById(R.id.title));
        author = ((TextView) itemView.findViewById(R.id.author));
        play = ((ImageView) itemView.findViewById(R.id.play));
    }

    public void display(RandomClips RandomClip) {
        currentRandomClip = RandomClip;
        title.setText(RandomClip.title);
        author.setText(RandomClip.author);
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Play clip: " + currentClip.title);
                mediaPlayer.create(this, R.raw.sound);

                if (mediaPlayer.isPlaying())
                {
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    Log.d(TAG, currentRandomClip.title + " has stopped");
                }
                else
                {
                    mediaPlayer.start();
                    Log.d(TAG, currentRandomClip.title + " is playing");
                }
            }
        });
    }
}

}

mediaPlayer.create()请求上下文和要播放的文件。 您作为参数传递的'this'不是Context(您在匿名类中),因此您会收到错误。
你应该传递一个上下文。 在实例化ClipsAdapter时,只需传递活动的上下文。

所以在你的活动实例化你的适配器:

clipsAdapter = new ClipsAdapter(this); 

在ClipsAdapter类中,使用一个参数创建构造函数:

public ClipsAdapter(YourActivity activity) {
    this.activity = activity;
}

最后:

mediaPlayer.create(activity, R.raw.sound);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM