I am new to Android development and I have slider fragments in my activity. I am trying to play different sounds for different sliders. However, when I slide from one page to another page, the sounds are overlapping. Can anyone help us? Here's my code:
public class Diabetes1 extends Fragment {
MediaPlayer mp;
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.slidertopimagecardlayout, container, false);
SharedPreferences prefs = this.getActivity().getSharedPreferences("MY_LANGUAGE", MODE_PRIVATE);
if (prefs.getString("myLanguage", "").equals("en")) {
mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
mp.start();
} else if (prefs.getString("myLanguage", "").equals("es")) {
mp = MediaPlayer.create(getActivity().getBaseContext(), getResources().getIdentifier("diab1en", "raw", this.getActivity().getPackageName()));
mp.start();
}
return rootView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// Make sure that we are currently visible
if (this.isVisible()) {
// If we are becoming invisible, then...
if (!isVisibleToUser) {
mp.stop();
} else {
// do what you like
}
}
}
@Override
public void onPause() {
super.onPause();
if(mp.isPlaying()) {
mp.stop();
}
}
@Override
public void onResume() {
super.onResume();
}
}
Viewpager doesn't work appropriately for your purpose because it creates offscreen fragments for fast transition between pages. For your problem onCreateView is called for each but onPause isn't. To handle this you can use pageChangeListener with your pagerAdapter. After each page change you can switch to another sound and stop the current one. To do this you have to extract your media player logic from your page fragments.