2013-02-13 10 views
8

Ich habe einen Viewpager mit verschiedenen Fragmenten, einer von diesen hat einen Videobetracht darin. Wenn ich die Seite wechsle, wenn das Video abgespielt wird, wird es auch dann wiedergegeben, wenn ich auf einer anderen Seite bin. Ich habe versucht, eine OnPageChangeListener für die ViewPager wie diese Umsetzung:VideoView auf Viewpager, Video beim Wechseln der Seite stoppen

viewpager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 

       if(position!=mAdapter.getCount()-1){ 
        MultimediaFragment frag = (MultimediaFragment)mAdapter.getItem(position+1); 
        frag.onPageIsChanged(); 
       } 

       if(position != 0){ 
        MultimediaFragment frag = (MultimediaFragment)mAdapter.getItem(position-1); 
        frag.onPageIsChanged(); 
       } 


      } 

Mit onPageIsChanged() eine Methode meiner eigenen, das mein Videoview-Attribut zu sagen versucht, Kontrollen zu stoppen und verstecken:

public void onPageIsChanged() { 
     if(mVideoView!=null){ 
      if(mVideoView.isPlaying()){ 
       mVideoView.stopPlayback(); 
      } 
      mMedia.hide(); 
     } 
    } 

Das Problem ist, dass mVideoView immer null ist, auch wenn es im Hintergrund abgespielt wird. Dieses Videobild wird mit der OnCreateView-Methode des Fragments erstellt, sollte es jedoch nicht auf meinem mVideoView-Feld verbleiben, bis das Fragment zerstört ist?

+0

Hallo, ich möchte fragen, ob Sie dieses Problem lösen, können Sie mir bitte etwas Hilfe geben? –

Antwort

10

Ich löste dies, indem die Methode überschrieben: obwohl

void setUserVisibleHint(boolean isVisibleToUser) 

Sie wissen nicht, ob das der richtige Weg ist.

+1

Hallo, ich brauche etwas Hilfe bitte !, ich benutze setUserVisibleHint, um das Video zu stoppen, wenn es nicht sichtbar ist, aber wenn auf Video-Seite direkt das Video nicht wiedergeben, wie kann ich dieses Problem lösen? –

+0

Wie löst das das Problem? Und wo stellst du das hin? Außerdem wird diese Methode nie aufgerufen, wenn ich den Pager wische. – JPM

2

Wahrscheinlich erstellt Ihr mAdapter.getItem jedes Mal ein neues Fragment. Dies führt dazu, dass die Videoansicht immer null ist.

5

Sie müssen die Methode setUserVisibleHint in einem Fragment überschreiben, in dem Sie Video abspielen.

public void setUserVisibleHint(boolean isVisibleToUser) 
    {  
    super.setUserVisibleHint(isVisibleToUser);       
    if (this.isVisible()) 
    {    
     if (!isVisibleToUser) // If we are becoming invisible, then... 
     { 
      //pause or stop video 
     } 

     if (isVisibleToUser) // If we are becoming visible, then... 
     {        
      //play your video    
     } 
    } 
    } 
Verwandte Themen