2013-02-13 29 views
8

Tôi có một người xem với các đoạn khác nhau, một trong số đó có một videoview trong đó. Nếu tôi chuyển trang khi video đang phát thì video sẽ phát lại ngay cả khi tôi đang ở trên một trang khác. Tôi đã cố gắng thực hiện một OnPageChangeListener cho ViewPager như thế này:VideoView trên Viewpager, dừng video khi chuyển đổi trang

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


      } 

Với onPageIsChanged() là một phương pháp của riêng tôi mà cố gắng để nói với thuộc tính videoview tôi phải dừng lại và ẩn các điều khiển:

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

Vấn đề là mVideoView luôn là null, ngay cả khi nó đang phát trên nền. Videoview này được tạo ra trên phương pháp OnCreateView của đoạn, nhưng nó vẫn không được đặt thành trường mVideoView của tôi cho đến khi phân đoạn bị phá hủy?

+0

Xin chào, tôi muốn hỏi bạn có giải quyết được vấn đề này không, bạn có thể cho tôi một số trợ giúp không? –

Trả lời

10

tôi giải quyết này bằng cách ghi đè phương pháp:

void setUserVisibleHint(boolean isVisibleToUser) 

Không biết nếu đó là cách thích hợp mặc dù.

+1

Xin chào, tôi cần một số trợ giúp !, Tôi sử dụng setUserVisibleHint để dừng video khi video không hiển thị nhưng khi quay lại trang video trực tiếp video không phát thì tôi có thể giải quyết vấn đề này như thế nào ?? –

+0

Điều này giải quyết vấn đề như thế nào? Và bạn đặt cái này ở đâu? Cộng với phương pháp này không bao giờ được gọi khi tôi vuốt máy nhắn tin. – JPM

2

Rất có thể mAdapter.getItem của bạn đang tạo một đoạn mới mỗi lần. Điều này sẽ làm cho chế độ xem video luôn là rỗng.

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

Bạn phải ghi đè phương thức setUserVisibleHint trong một đoạn mà bạn phát 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    
     } 
    } 
    } 
Các vấn đề liên quan