2015-09-04 173 views
1

setCurrentItem()函數不適用於以下android(java)代碼如何使其工作?viewPager.setCurrentItem()不起作用

Intent i = getIntent(); 
    int position = i.getIntExtra("img", 0); 
    viewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 
    ImageAdapter adapter = new ImageAdapter(this); 
    viewPager.setAdapter(adapter); 
    viewPager.setCurrentItem(position); 
+1

你在那裏設置額外的發現? –

+0

我正在給setCurrentItem()使用positon,所以它可以先顯示。 –

+0

他意味着你從哪裏發送int額外調用'「img」',從第一個活動 –

回答

3
private ViewPager viewPager; 

@Override 
public void onResume() { 
Intent i = getIntent(); 
int position = i.getIntExtra("img", 0); 
viewPager.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     viewPager.setCurrentItem(position); 
    } 
}, 100); 
} 
+2

雖然這可能會回答這個問題,但也應該解釋爲什麼以及如何解決問題。 – BDL

+0

如果系統運行速度慢,將無法工作,這是一種解決方法,而不是解決方案 – Frank

3

弗蘭克是正確的。要提供獨立的滾動設備,您應該使用onGlobalLayoutListener。因此,您可以保證在您調用viewPager.setCurrentItem(position)時渲染視圖。否則,由於視圖尚未呈現,因此setCurrentItem將不起任何作用。

viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
     { 
      @Override 
      public void onGlobalLayout() 
      { 
       viewPager.setCurrentItem(position, false); 
      } 
     }); 

我知道問題已經老了,但也許別人會發現這個有用!

3

這些答案都不適用於我 - 我花了幾小時才知道我忘記了更新getCount()

我的getCount()方法在執行FragmentPagerAdapter時顯示不正確的計數,所以它不能更改頁面,因爲它不是它的一部分。