我有下面的 RecyclerView 适配器。
如您所见,每个 RecyclerView 项目都有特定的声音。
如何让项目点击等到相关声音播放完毕?
目前,当单击 RecyclerView 项目时,它会立即跳转到预期的活动,而无需等待声音播放完毕。
所以,应该是这样
的: 1. 用户点击 RecyclerView 项目。
2.相关声音开始播放。
3. 声音播放完毕。
4. 一个新的活动开始。
适配器
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ViewHolder> {
RecyclerView.Adapter.StateRestorationPolicy PREVENT_WHEN_EMPTY;
private String[] titles = {"Topic1","Topic2","Topic3","Topic4","Topic5","Topic6","Topic7","Topic8","Topic9","Topic10"};
private ArrayList<Item> items;
private Context context;
public RvAdapter(ArrayList<Item> items, Context context) { this.items = items; this.context = context; }
MediaPlayer main_mp;
@NonNull
@Override
public RvAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);
return new ViewHolder(view); }
@Override
public void onBindViewHolder(@NonNull RvAdapter.ViewHolder holder, final int position) {
releaseMediaPlayer();
final Item item = items.get(position);
holder.imageView.setImageResource(item.getImageResource());
holder.textView.setText(titles[position]);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { releaseMediaPlayer();
Context context = RvAdapter.this.context;
final Intent intent;
switch (position){
case 0: setupMediaPlayer(R.raw.topic1sound); intent = new Intent(context, Topic1.class); break;
case 1: setupMediaPlayer(R.raw.topic2sound); intent = new Intent(context, Topic2.class); break;
case 2: setupMediaPlayer(R.raw.topic3sound); intent = new Intent(context, Topic3.class); break;
case 3: setupMediaPlayer(R.raw.topic4sound); intent = new Intent(context, Topic4.class); break;
case 4: setupMediaPlayer(R.raw.topic5sound); intent = new Intent(context, Topic5.class); break;
case 5: setupMediaPlayer(R.raw.topic6sound); intent = new Intent(context, Topic6.class); break;
case 6: setupMediaPlayer(R.raw.topic7sound); intent = new Intent(context, Topic7.class); break;
case 7: setupMediaPlayer(R.raw.topic8sound); intent = new Intent(context, Topic8.class); break;
case 8: setupMediaPlayer(R.raw.topic9sound); intent = new Intent(context, Topic9.class); break;
case 9: setupMediaPlayer(R.raw.topic10sound); intent = new Intent(context, Topic10.class); break;
default: throw new IllegalStateException("Unexpected value: " + position);
} context.startActivity(intent);
}
});
}
@Override
public int getItemCount() { return items.size(); }
public void setupMediaPlayer(int resource) {main_mp = MediaPlayer.create(context, resource); main_mp.start();}
public void releaseMediaPlayer(){if (main_mp != null) { main_mp.stop(); main_mp.release(); main_mp = null; }}
public static class ViewHolder extends RecyclerView.ViewHolder { ImageView imageView; TextView textView;
public ViewHolder(@NonNull final View itemView) { super(itemView);
imageView = itemView.findViewById(R.id.titleImageView);
textView = itemView.findViewById(R.id.titleTextView); }
}
}