2

I have a slider fragments in my activity. I am trying to play a sound when the fragment is visible and stop the media player when the user slides to another fragment. Here's my code. I've tried implementing the method onHiddenChanged for the fragment but the sound keeps playing.

public class WorkoutBuddyViewFragment extends Fragment {


    MediaPlayer mp;
    public WorkoutBuddyViewFragment() {


    }
    ImageButton play;
    TextView display;



    // BPPVComment#7: For now, this is a placeholder screen. 
    // override to provide sensor assisted exercise session 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {


        View pageView = null;

        pageView = inflater.inflate(R.layout.workout_buddy_dummy, container, false);
        play = (ImageButton) pageView.findViewById(R.id.playButton);
        display = (TextView) pageView.findViewById(R.id.textForWOB);
        mp = MediaPlayer.create(getActivity(), R.raw.welcome);
        try
        {
            mp.start();
        }
        catch (NullPointerException e)
        {
            display.setText("Null Pointer Exception");
        }


        play.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent startExercise = new Intent("android.intent.action.exercise");
                startActivity(startExercise);

            }
        });

        return pageView;
    }



    @Override
    public void onHiddenChanged(boolean hidden) {
        // TODO Auto-generated method stub
        super.onHiddenChanged(hidden);
        try
        {
            mp.stop();
        }
        catch(NullPointerException e)
        {
            e.printStackTrace();
        }
    }

}
brrystrw
  • 471
  • 7
  • 20
streetsoldier
  • 1,259
  • 1
  • 14
  • 32
  • what about onPause(), have you tried it there? – brwngrldev Mar 10 '14 at 20:09
  • I have. Problem is, when the user gets to the fragment before the actual fragment, the voice starts playing. I am assuming this is happening because android gets the next fragment ready to save memory. But I want to play the sound only when the fragment is visible and stop it when the fragment is not visible. – streetsoldier Mar 10 '14 at 20:11

2 Answers2

4

I would try this, setUserVisibleHint method.

@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
        }
    }
}
Atiq
  • 14,435
  • 6
  • 54
  • 69
brwngrldev
  • 3,664
  • 3
  • 24
  • 45
1
public class VideoFragment extends Fragment{..............

private VideoView video;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (video == null) {
        return;
    }

    if (isVisibleToUser) {
        video.start();
    }
    else {
        video.stopPlayback();
    }

}