如何停止当前片段媒体播放器时移动到下一个片段?



我有两个片段与tabLayout,我试图停止一个片段的当前声音,当我想在另一个片段播放声音这是我的适配器类

public class Adapter extends RecyclerView.Adapter<Adapter.holder> {
public Context context;
String data[];
int images[];
int sound[];
holder h;
int playPosition = -1;
public Adapter() {
}
//constructor
public Adapter(String[] data, int[] images, int[] sound, Context context) {
this.data = data;
this.images = images;
this.sound = sound;
this.context = context;
h = null;
playPosition = -1;
}
//class holder
public class holder extends RecyclerView.ViewHolder {
AppCompatImageView imageView;
TextView textView;
MediaPlayer mPlayer;

public holder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text_view);
imageView = itemView.findViewById(R.id.img_view);
}
}
@NonNull
@Override
public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.singleview, parent, false);
return new holder(view);
}
@Override
public void onBindViewHolder(@NonNull final holder holder, final int position) {
holder.textView.setText(data[position]);
holder.imageView.setImageResource(images[position]);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
if (holder.mPlayer != null) {
holder.mPlayer.release();
holder.mPlayer = null;
}
holder.mPlayer = MediaPlayer.create(context, sound[position]);
// stops the previous sound
if (h != null && playPosition != -1 && position != playPosition) {
h.mPlayer.stop();
h.mPlayer = MediaPlayer.create(context, sound[playPosition]);
}
holder.mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
holder.mPlayer.start();
Toast.makeText(context, "started", Toast.LENGTH_SHORT).show();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.stop();
mediaPlayer.release();
holder.mPlayer = null;
Toast.makeText(context, "Finished", Toast.LENGTH_SHORT).show();
// holder.playIcon.setVisibility(View.VISIBLE);
}
});
}
});
} catch (Exception e) {
e.printStackTrace();
}
h = holder;
playPosition = position;
}
});
}
@Override
public int getItemCount() {
return data.length;
}

}

这是我的片段

public class NatureForest extends Fragment {
RecyclerView recyclerView;
public NatureForest() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_main, container, false);
String tab2Text[] = {"Forest forest","Forest creek","Forest leaves","Forest birds",
"Forest waterfall","Forest wind","Forest fire",
"Forest grasshopper", "Forest frogs"};
int tab2Images[] = {R.drawable.ic_rain2,R.drawable.ic_rain2,R.drawable.ic_rain2,R.drawable.ic_rain2,
R.drawable.ic_rain2,R.drawable.ic_rain2,R.drawable.ic_rain2,R.drawable.ic_rain2,R.drawable.ic_rain2};
int sound[]={R.raw.sounds,R.raw.sounds,R.raw.sounds,R.raw.sounds,R.raw.sounds,
R.raw.sounds,R.raw.sounds,R.raw.sounds,R.raw.sounds,R.raw.sounds,
R.raw.sounds};
recyclerView =view.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),3));
recyclerView.setAdapter(new Adapter(tab2Text,tab2Images,sound,getContext()));
return view;
}

}

如果播放一个片段中的声音,同时播放第二个片段中的另一个声音,则前一个片段的声音不会停止。

onPause()

:系统调用这个方法作为用户离开片段的第一个指示。通常,您应该在这里提交任何应该在当前用户会话之外持久化的更改

重写这个方法并暂停片段中的mediaplayer实例