2013-02-13 12 views
8

Ho un viewpager con diversi frammenti, uno di questi ha una videoview in esso. Se cambio pagina quando il video è in riproduzione, riproduce i remake anche quando sono su una pagina diversa. Ho provato l'attuazione di un OnPageChangeListener per la ViewPager come questo:VideoView su Viewpager, interruzione video quando si cambia pagina

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(); 
       } 


      } 

Con onPageIsChanged() essendo un metodo tutto mio, che cerca di raccontare la mia attributo VideoView di fermarsi e di nascondere i controlli:

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

Il problema è che mVideoView è sempre nullo, anche quando viene riprodotto sullo sfondo. Questa videoview viene creata sul metodo OnCreateView del frammento, ma non dovrebbe rimanere impostata sul mio campo mVideoView fino a quando il frammento non viene distrutto?

+0

Ciao, voglio chiedere se risolvi questo problema, puoi darmi un aiuto, per favore? –

risposta

10

Ho risolto questo sovrascrivendo il metodo:

void setUserVisibleHint(boolean isVisibleToUser) 

Non so se questo è il modo giusto però.

+1

Salve, ho bisogno di aiuto, per favore !, utilizzo setUserVisibleHint per fermare il video quando non è visibile, ma quando ritorni alla pagina video direttamente il video non viene riprodotto come posso risolvere questo problema ?? –

+0

Come risolve questo problema? E dove lo metti? Inoltre questo metodo non viene mai chiamato quando faccio scorrere il cercapersone. – JPM

2

Molto probabilmente mAdapter.getItem sta creando un nuovo frammento ogni volta. Ciò farà sì che la vista video sia sempre nullo.

public class MyAdapter extends FragmentStatePagerAdapter { 
    SparseArray<Fragment>fragments = new SparseArray<Fragment>(); 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return contents.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment frag = fragments.get(position); 
     Bundle args = new Bundle(); 
     if(frag != null){ 
      return frag; 
     } 
     fragments.put(position, frag); 
     return frag; 
    } 
} 
5

È necessario sovrascrivere il metodo setUserVisibleHint in un frammento in cui si riproduce un video.

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    
     } 
    } 
    } 
Problemi correlati