gpt4 book ai didi

java - android recyclerview viewholder Mediaplayer处理点击问题

转载 作者:行者123 更新时间:2023-12-02 10:16:22 24 4
gpt4 key购买 nike

我正在通过单击项目 View 来播放音频文件(MP3),上一个文件会自动停止,但问题是在点击recyclerview的第3个项目后,第一个文件一个在点击时不播放声音,并且在列表中的其他一些点击上也发生了同样的问题。我已经添加了完整的适配器类

public class RingToneAdapter extends RecyclerView.Adapter<RingToneAdapter.RingToneViewHolder> {
//removed declared varaible for the sake of post to edit
static final int[] resID = {R.raw.a48, R.raw.funny_hen};

public RingToneAdapter(Context rcntx, List<RingTone_Items> ringtonelist) {
this.rcntx = rcntx;
this.ringtonelist = ringtonelist;
}

@NonNull
@Override
public RingToneViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
view = LayoutInflater.from(rcntx).inflate(R.layout.ringtone_values, viewGroup, false);
RingToneViewHolder ringToneViewHolder = new RingToneViewHolder(view);
return ringToneViewHolder;
}

//playing sounds on recycler view

@Override
public void onBindViewHolder(@NonNull final RingToneViewHolder ringToneViewHolder, final int i) {
final RingTone_Items ringTone_items = ringtonelist.get(i);
ringToneViewHolder.rtv.setText(ringTone_items.getRintonetv());
if (mSelectedItem == i) {
ringToneViewHolder.iconplay.setImageResource(R.drawable.ic_pause_black_24dp);
} else {
ringToneViewHolder.iconplay.setImageResource(R.drawable.ic_play_arrow_black_24dp);
}

ringToneViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mp != null && mp.isPlaying()) {
mp.stop();
mp.reset();
mp = null;
ringToneViewHolder.iconplay.setImageResource(R.drawable.ic_play_arrow_black_24dp);

}
//Intent it = new Intent(rcntx, ViewPager_Data.class);
Intent it = new Intent(rcntx, AndroidViewPagerExample.class);
it.putExtra("POS",i);
it.putExtra("name",ringTone_items.getRintonetv());

rcntx.startActivity(it);
}
});
ringToneViewHolder.iconplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mSelectedItem == i) {
mSelectedItem = -1;
oldpossssssss = i;
} else {
mSelectedItem = i;
}
notifyDataSetChanged();
if (mp != null && mp.isPlaying()) {
mp.stop();
mp.reset();
mp = null;

if (oldpossssssss == i) {
} else {
mp = new MediaPlayer();
mp = MediaPlayer.create(rcntx, resID[i]);
mp.start();
}
} else {
mp = new MediaPlayer();
mp = MediaPlayer.create(rcntx, resID[i]);
mp.start();
}
}
});
}

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

class RingToneViewHolder extends RecyclerView.ViewHolder {
private TextView rtv, hello, close;
private ImageView iconplay;


public RingToneViewHolder(@NonNull View itemView) {
super(itemView);
rtv = itemView.findViewById(R.id.ringtitle);
iconplay = itemView.findViewById(R.id.playicon);

}

}

如何根据相应单击播放媒体文件来顺利管理此问题。我哪里做错了,请帮助我,谢谢。

最佳答案

我建议您在 viewHolders 中使用单音媒体播放器。首先,使用多个准备好的媒体播放器的内存效率不是很高。其次,它将允许您解决后台播放声音的问题,因为一个媒体播放器一次只能播放一个音频。

关于java - android recyclerview viewholder Mediaplayer处理点击问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54649892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com