2016-05-31 3 views
0

Ich versuche, eine Lösung zu finden, konnte es aber nicht finden.Android wie Mediaplayer zu stoppen, wenn neuer Ton in recycleview starten

Mein Problem ist, dass ich viele Elemente im Recycleview habe. Jedes Element hat ein Bild und wenn ich auf dieses Bild klicke, wird der Sound für dieses Bild gestartet. Problem ist, wenn ich einen neuen Sound starte vorherigen Sound nicht aufhören, es spielt weiter, bis Sound Finish. Nachdem ich 15 klicken, Sounds 20 App abgestürzt bekommen, und ich erhalten diese Fehlermeldung:

E/Mediaplayer: Fehler (1, -19)

Irgendwie muss ich Freigabe- und Stopp des vorhergehenden Tons implementieren, wenn i klicke auf den Neuen. Ich versuche, eine Lösung zu finden, aber ich konnte sie nicht für die Recyclingansicht finden.

Hier ist mein Adapter Code:

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; 
 
    } 
 

 

 

 

 
}

Antwort

0

hinzufügen:

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

und diese:

....... 

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

private void stopPlaying() { 

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

ist alles rot, kann ich nicht ruf sto an pPlaying-Methode von Klick. – beginner

+0

versuchen Sie die Bearbeitung ... – Srdan

+0

Ich kann immer noch nicht Methode stopPlaying erreichen. Er schreibt nicht statisch metod stopPlaying() kann nicht von einem statischen Kontext verweist – beginner