我搜索此问题的解决方案但无法找到它: - 该应用程序在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 :(得分:0)
可能问题是因为setOnClickListener
位于onCreateViewHolder
。
使用onBindViewHolder
方法获取整个setOnClickListener
行的RecyclerView
:
1。更改MyViewHolder
以获取行视图:
public View view;
public MyViewHolder(View pItem) {
super(pItem);
this.view=pItem;
....
}
2。现在将点击监听器添加到view
中的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();
}
});