У меня есть адаптер для 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); }
}
}