2011-11-14 24 views
66

我想知道ViewPager的當前頁面位置。我創建一個適配器並將此適配器設置爲ViewPager。現在我想知道當前頁面編號或當前視圖的位置,因爲我想在該特定頁面上啓動一些額外的事件。如何獲取ViewPager for Android的當前頁碼?

我用viewPager.setCurrentItem(1);設置第一項。

是否有類似的方法獲取當前頁面?

回答

140

在最新的軟件包,你也可以使用

vp.getCurrentItem() 

VP是viewPager,

pageListener = new PageListener(); 
vp.setOnPageChangeListener(pageListener); 

你必須把一個頁面更改偵聽您viewPager。 viewPager沒有方法獲取當前頁面。

private int currentPage; 

    private static class PageListener extends SimpleOnPageChangeListener{ 
      public void onPageSelected(int position) { 
       Log.i(TAG, "page selected " + position); 
        currentPage = position; 
     } 
    } 
+0

謝謝很多人..你的作品..你以前在ViewPager上工作過嗎? –

+0

只有一個想法currentPage應該是靜態的... – Necronet

+0

@Necronet不,它不應該。 PageListener類應該是一個內部類,而不是嵌套類。 – dcow

10

如果你只想要的位置,vp.getCurrentItem()將它送給你,沒有必要應用onPageChangeListener()單獨這一目的。

3

沒有在viewpager.i任何方法getCurrentItem()已經檢查了API

+3

你必須更新Android SDK Manager中的兼容性包,然後只有你得到該方法。 – krisDrOid

+0

它是否適用於API v7? – melanke

43

有一種方法object_of_ViewPager.getCurrentItem()返回視圖尋呼機

+6

這應該是被接受的答案 –

+0

我實際上首先發布了這個答案@ChuckBoris,依然這一個似乎收集了更多的選票,並且顯然是一個代言。奇怪的是這個網站的方式:) –

4

getCurrentItem()當前查看的頁面的位置,實際上並不給第一個和最後一頁的正確位置我固定它添加以下代碼:

public void CalcPostion() {  
    current = viewPager.getCurrentItem(); 

    if ((last == current) && (current != 1) && (current != 0)) { 
     current = current + 1; 
     viewPager.setCurrentItem(current); 
    } 
    if ((last == 1) && (current == 1)) { 
     last = 0; 
     current = 0; 
    } 
    display(); 
    last = current; 
} 
5

對於這個問題OnPageChange對監聽器是最好的,但它也有一個小的錯誤,這是它不會d檢測第0個位置的起始時間一旦您將更改頁面,它將開始檢測頁面選定的位置......對於此問題,我提供了最簡單的解決方案

1.您必須保持所選的位置值,然後使用它......
2.案例1:在起始位置總是零....
案例2:假設如果您設置當前項目意味着您將該值設置爲保持位置
3 。然後做你的動作與使用,保持在你的活動...

Public int maintain=0; 
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int i, float v, int i2) { 
      //Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onPageSelected(int i) { 
      // here you will get the position of selected page 
      maintain = i; 


     } 

     @Override 
     public void onPageScrollStateChanged(int i) { 

     } 
    }); 


updateButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show(); 
      data.set(maintain, "Replaced "+maintain);   
      myViewPager.getAdapter().notifyDataSetChanged(); 
     } 
    }); 
+1

setOnPageChangeListener已棄用。使用addOnPageChangeListener而不是setOnPageChangeListener。 – Selin

4

你會找出setOnPageChangeListener已被棄用,使用addOnPageChangeListener,如下圖所示:

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

    } 

    @Override 
    public void onPageSelected(int position) { 
     if(position == 1){ // if you want the second page, for example 
      //Your code here 
     } 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 
2

setOnPageChangeListener()方法已被棄用。改爲使用 addOnPageChangeListener(OnPageChangeListener)

您可以使用OnPageChangeListener和進入內部onPageSelected()方法的位置,這是一個例子:

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

     } 

     @Override 
     public void onPageSelected(int position) { 
      Log.d(TAG, "my position is : " + position); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

或者只是使用getCurrentItem()才能獲得真正的位置是:

viewPager.getCurrentItem(); 
相關問題