2013-02-13 12 views
8

Mam podgląd stron z różnymi fragmentami, jeden z nich ma w nim widok wideo. Jeśli przełączam stronę podczas odtwarzania wideo, to odtwarza się, nawet gdy jestem na innej stronie. Próbowałem wdrożenie OnPageChangeListener dla ViewPager tak:Wideo View na Viewpager, zatrzymywanie wideo podczas przełączania strony

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


      } 

Z onPageIsChanged() jest to metoda mój własny, który próbuje opowiedzieć mój atrybut videoview się zatrzymać i ukryć elementy sterujące:

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

Problem jest to, że mVideoView ma zawsze wartość zerową, nawet jeśli gra w tle. Ten widok wideo jest tworzony w metodzie OnCreateView fragmentu, ale czy nie powinien pozostać ustawiony na moje pole mVideoView, dopóki fragment nie zostanie zniszczony?

+0

Witam, chcę zapytać, czy rozwiązałeś ten problem, czy możesz mi pomóc? –

Odpowiedz

10

Rozwiązałem to przez przesłanianie metody:

void setUserVisibleHint(boolean isVisibleToUser) 

nie wiem, czy to jest właściwy sposób chociaż.

+1

Cześć, potrzebuję pomocy !, Używam setUserVisibleHint, aby zatrzymać wideo, gdy nie jest widoczny, ale po powrocie na stronę wideo wideo nie gra, jak mogę rozwiązać ten problem? –

+0

Jak to rozwiązuje problem? I gdzie to ustawić? Plus ta metoda nigdy nie zostanie wywołana podczas przesuwania pager'a. – JPM

2

Najprawdopodobniej twój mAdapter.getItem tworzy za każdym razem nowy fragment. Spowoduje to, że widok wideo zawsze będzie mieć wartość NULL.

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

Musisz przesłonić metodę setUserVisibleHint we fragmencie, gdzie u odtwarzać wideo.

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    
     } 
    } 
    } 
Powiązane problemy