簡體   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