2012-07-02 33 views
79

Tôi có ba trang (Phân đoạn) bên trong một ViewPager, tuy nhiên tôi chỉ muốn hiển thị một mục trình đơn cho hai trong số các trang đó.Xác định khi một ViewPager thay đổi các trang

Mã được đưa ra trong một previous SO answer dường như không làm việc:

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

    if (isVisibleToUser == true) { } 
    else if (isVisibleToUser == false) { } 

} 

Eclipse nói @ Override là không cần thiết và siêu không thể được thiết lập. Nó không bao giờ được gọi bởi hệ thống, và thậm chí nếu nó là làm thế nào tôi sẽ xác định trang nào đang được hiển thị vào lúc này? Tôi có thể giúp gì ở đây không?

+0

Điều này phù hợp với tôi và cung cấp thêm một chút ngữ cảnh về cách sử dụng giải pháp đã cho: [Phát hiện tab ViewPager thay đổi bên trong Fragment] (http://stackoverflow.com/questions/9779397/detect-viewpager-tab-change-inside-fragment). – gcl1

Trả lời

166

Sử dụng ViewPager.onPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() { 
    public void onPageScrollStateChanged(int state) {} 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

    public void onPageSelected(int position) { 
     // Check if this is the page you want. 
    } 
}); 
+1

Có lỗi đánh máy trong dòng 1: SetOnPageChangeListener phải được setOnPageChangeListener. – Javide

+30

Bạn có thể sử dụng SimpleOnPageChangeListener thay thế và chỉ ghi đè trênPageSelected – clocksmith

+0

Thanx để đưa ra câu trả lời đúng – Jigsh

101

ViewPager.setOnPageChangeListener bị phản đối ngay bây giờ. Bây giờ bạn cần sử dụng ViewPager.addOnPageChangeListener để thay thế.

ví dụ,

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
+2

Tôi dường như không hiểu. Là một người mới bắt đầu tuyệt đối. Vì vậy, những gì chúng ta đặt bên trong những phương pháp đó. Xin hãy giúp tôi về nơi để tìm hiểu 'addOnPageChangeListener'. –

+0

+1 cho thông tin, nhưng sự khác biệt của hai 'ViewPager.SimpleOnPageChangeListener' và' ViewPager.OnPageChangeListener' như những gì được đề cập ở trên? – RoCk

+2

@RoCk Với SimpleOnPageChangeListener bạn chỉ cần ghi đè lên các phương thức bạn thực sự muốn sử dụng. Xem http://stackoverflow.com/a/31961397/608312 ví dụ. – JakeSteam

31

Bạn cũng có thể sử dụng ViewPager.SimpleOnPageChangeListener thay vì ViewPager.OnPageChangeListener và ghi đè chỉ những phương pháp bạn muốn sử dụng.

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 

    // optional 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } 

    // optional 
    @Override 
    public void onPageSelected(int position) { } 

    // optional 
    @Override 
    public void onPageScrollStateChanged(int state) { } 
}); 

Hope trợ giúp này :)

Edit: Theo API android, setOnPageChangeListener (ViewPager.OnPageChangeListener listener) bị phản đối. Vui lòng kiểm tra url này: - Android ViewPager API

+1

Vì 'mViewPager.setOnPageChangeListener();' không được dùng nữa, cái này đang hoạt động tốt. –

+0

Trong đoạn mã trên, để phát hiện xem trạng thái đã thay đổi có lưu vị trí hiện tại và so sánh nó khi trang được cuộn trong phương thức onPageScrolled hay không. – AnupamChugh

Các vấn đề liên quan