2017-01-02 8 views
0

-이 앱은 RecyclerView 에 그림을 표시합니다. 이제는 모든 항목에 대해 소리가 재생되지만 하나만 나오고 종료하면 활동으로 건너 뜁니다. 다음 사운드 는 - 내 어댑터 코드가그림이있는 Recyclerview 사진

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(); 

} 

그리고

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; 

} 
} 
이 사용자

로 클릭 한 각 사진에 대해 서로 다른 사운드를 재생하려면

답변

0

아마도 setOnClickListeneronCreateViewHolder에 있기 때문에 문제가 발생했을 수 있습니다.

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

     this.view=pItem; 
     .... 
    } 

2 지금 view에 클릭 리스너를 추가 : 행의 루트보기를 얻을 수

1 변경 MyViewHolder :

사용 onBindViewHolder 방법은 RecyclerView의 전체 행에 대해 setOnClickListener를 얻을 수 있습니다 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

답장을 보내 주셔서 감사합니다. 그러나 저에게 도움이되지 못합니다. – Pawel

+0

@Pawel : 문제가 해결 되었습니까? –