2016-05-31 3 views
0

Я пытаюсь найти решение, но не смог его найти.Android, как остановить медиаплеер при запуске нового звука в Recycleview

Моя проблема в том, что у меня есть много предметов в recycleview. Каждый элемент имеет изображение, и когда я нажимаю на это изображение, он запускает звук для этого изображения. Проблема в том, что я начинаю новый звук, предыдущий звук не останавливается, его воспроизведение продолжается до завершения звука. После того, как я нажимаю 15, 20 звуков приложение получить разбился, и я получаю сообщение об ошибке:

E/MediaPlayer: ошибки (1, -19)

Как-то мне нужно осуществить выпуск и остановку предыдущего звука, когда я нажмите на новый. Я пытаюсь найти решение, но я не мог найти его для recycleview.

Вот мой код адаптера:

import android.content.Context; 
 
import android.media.MediaPlayer; 
 
import android.support.v7.widget.RecyclerView; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.ImageView; 
 
import android.widget.TextView; 
 

 
import com.bumptech.glide.Glide; 
 

 
import java.util.List; 
 

 

 
public class ZivotinjeAdapter extends RecyclerView.Adapter<ZivotinjeAdapter.ViewHolder> { 
 

 
    @Override 
 
    public ZivotinjeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
 
     Context context = parent.getContext(); 
 
     LayoutInflater inflater = LayoutInflater.from(context); 
 

 
     // Inflate the custom layout 
 
     View contactView = inflater.inflate(R.layout.item_zivotinje, parent, false); 
 

 
     // Return a new holder instance 
 
     ViewHolder viewHolder = new ViewHolder(contactView); 
 
     return viewHolder; 
 
    } 
 

 
    @Override 
 
    public void onBindViewHolder(ZivotinjeAdapter.ViewHolder viewHolder, int position) { 
 

 

 
     Zivotinje zivotinjeIme = mZivotinje.get(position); 
 

 
     // Set item views based on the data model 
 
     TextView textView = viewHolder.nameTextView; 
 
     textView.setText(zivotinjeIme.getmAnimal_name()); 
 

 
     //THIS IS WHERE I HANDALE IMAGE VIEW. Using glide for images 
 
     ImageView slika_source = viewHolder.imageView; 
 
     Glide.with(slika_source.getContext()) 
 
       .load((Integer) zivotinjeIme.getmAnimal_slika()) 
 
       .into(slika_source); 
 

 

 

 
     viewHolder.setItem(mZivotinje.get(position)); 
 

 
    } 
 

 

 
    @Override 
 
    public int getItemCount() { 
 
     return mZivotinje.size(); 
 
    } 
 

 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
 

 
     public ImageView imageView; 
 
     public TextView nameTextView; 
 
     private Zivotinje mItem; 
 

 

 

 
     public void setItem(Zivotinje item) { 
 
      this.mItem = item; 
 
     } 
 

 

 

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

 
      nameTextView = (TextView) itemView.findViewById(R.id.zivotinjaIme_id); 
 
      imageView = (ImageView) itemView.findViewById(R.id.slika_id); 
 

 
      
 
//this is click event for each item and here i play sound 
 
      itemView.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
        
 
        MediaPlayer mediaPlayer = MediaPlayer.create(v.getContext(), mItem.getmSound()); 
 
        mediaPlayer.start(); 
 

 
       } 
 
      }); 
 

 
     } 
 

 

 
    } 
 

 
    private List<Zivotinje> mZivotinje; 
 

 
    public ZivotinjeAdapter(List<Zivotinje> animals) { 
 
     mZivotinje = animals; 
 
    } 
 

 

 

 

 
}

ответ

0

Добавить это:

@Override 
public void onClick(View v) { 
stopPlaying(); <-------    
MediaPlayer mediaPlayer = MediaPlayer.create(v.getContext(),mItem.getmSound()); 
mediaPlayer.start();} 

и это:

....... 

public ZivotinjeAdapter(List<Zivotinje> animals) { 
    mZivotinje = animals; 
} 

private void stopPlaying() { 

    if(mediaPlayer != null && mediaPlayer.isPlaying()) 
    { 
     mediaPlayer.stop(); 
     mediaPlayer.reset(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
} 
+0

все это красный, я не могу вызвать сто pPlaying метод из щелчка. – beginner

+0

попробуйте отредактировать ... – Srdan

+0

Я до сих пор не могу дойти до метода stopPlaying. Он пишет нон статический Metod stopPlaying() не может ссылаться из статического контекста – beginner