[英]How to make media player stop when pressing device back button from a fragment back to activity
[英]how to stop current fragment media player when moved to next fragment?
我有两个带有 tabLayout 的片段,当我想在另一个片段中播放声音时,我试图停止片段的当前声音这是我的适配器 class
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;
}
}
这里如果播放一个片段中的声音,同时从第二个片段播放另一个声音,则前一个片段声音不会停止。
暂停()
:系统调用此方法作为用户离开片段的第一个指示。 这通常是您应该提交任何应该在当前用户之外保留的更改 session
只需覆盖此方法并暂停该片段中的媒体播放器实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.