2017-01-02 3 views
0

Ich Suche Lösung für dieses Problem und kann es nicht finden: - die App zeigt Bilder in RecyclerView - jetzt Sound spielt aber nur eine für alle Elemente und beim Beenden geben Sie die Aktivität es überspringt nächste Ton - ich möchte für jedes Foto anderen Sound spielen durch den Benutzer angeklicktAndroid Recyclerview Sound mit Bild

Es ist mein Adapter Code

public class MyAdapter extends RecyclerView.Adapter { 

private static MediaPlayer mySound; 

private ArrayList<Article> mArticles = new ArrayList<>(); 
public RecyclerView mRecyclerView; 

private class MyViewHolder extends RecyclerView.ViewHolder { 

    public ImageView mTitle; 

    public MyViewHolder(View pItem) { 
     super(pItem); 

     mTitle = (ImageView) pItem.findViewById(R.id.imageView); 
    } 
} 

public MyAdapter(ArrayList<Article> pArticles, RecyclerView pRecyclerView) { 
    mArticles = pArticles; 
    mRecyclerView = pRecyclerView; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) { 
      View view = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.article_layout_allcats, viewGroup, false); 

     view.setOnClickListener(new View.OnClickListener() { 
     @Override 
    public void onClick(View v) { 
      mySound = MediaPlayer.create(v.getContext(), Article.getSounds()); 
      mySound.start(); 
     } 
    }); 

    return new MyViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int i) { 
    // uzupełniamy layout artykułu 
    Article article = mArticles.get(i); 
    ((MyViewHolder) viewHolder).mTitle.setImageResource(article.getTitle()); 
} 

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

} 

Und

public class Article { 
private int mTitle; 
public static int mSounds; 

private static int[] sTitles = { 
PAWEL int[] sTitles ={ 
     R.drawable.photo1, 
     ... 
     R.drawable.photo10 
}; 

public static int[] sSounds = { 
     R.raw.sound1, 
     ... 
     R.raw.sound10 

     }; 

public Article() { 

    Random random = new Random(); 

    mTitle = sTitles[random.nextInt(sTitles.length)]; 
    mSounds = sSounds[random.nextInt(sSounds.length)]; 
} 
public int getTitle() { 
    return mTitle; 

} 
public static int getSounds() { 
    return mSounds; 

} 
} 

Antwort

0

Wahrscheinlich Problem ist, weil setOnClickListener in onCreateViewHolder ist.

1. ändern MyViewHolder root Ansicht der Reihe zu erhalten:

Verwenden onBindViewHolder Methode setOnClickListener für ganze Reihe von RecyclerView zu bekommen

public View view; 
public MyViewHolder(View pItem) { 
     super(pItem); 

     this.view=pItem; 
     .... 
    } 

2. Jetzt klicken Zuhörer view hinzufügen in onBindViewHolder:

View rowView=((MyViewHolder)viewHolder).view; 
rowView.setTag(article.getSounds()); // set sound it here 
view.setOnClickListener(new View.OnClickListener() { 
     @Override 
    public void onClick(View v) { 
      mySound = MediaPlayer.create(v.getContext(), 
        (Integer.parseInt(v.getTag().toString()))); 
      mySound.start(); 
     } 
}); 
+0

Danke für die Antwort, aber es hat nicht für mich funktioniert. – Pawel

+0

@Pawel: Problem gelöst oder nicht? –