Android Recyclerview声音与图片

时间:2017-01-02 17:54:27

标签: android android-recyclerview soundcloud

我搜索此问题的解决方案但无法找到它: - 该应用程序在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;

}
}

1 个答案:

答案 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();
        }
 });