1. 程式人生 > >ViewPager如何獲取當前的子view( 解決getChildAt(position) 為null的問題)(android__1332)

ViewPager如何獲取當前的子view( 解決getChildAt(position) 為null的問題)(android__1332)

http://blog.csdn.net/jdsjlzx/article/details/44470417

from:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0804/1504.html

我使用viewpager做了一個滑動的切換效果,效果還挺不錯,具體實現效果網上很多,各位可以去找,不過在實現切換效果之後,因為需求需要,我需要獲取當前顯示的那個view,這就很讓人噁心了。viewpager有setOnPageChangeListener,裡面有

@Override
  public voidonPageSelected(int arg0) {
  }
  @Override
  public voidonPageScrolled(int arg0, float arg1, int arg2) {
  }
  @Override
  public voidonPageScrollStateChanged(int arg0) {

  }

方法,我已開始是在onPageSelected方法中通過viewpager.getChildAt(arg0)方式,想獲取當前顯示的view。不過這樣,超過3個view以後就會報空指標錯誤,獲取的view就會為空,跟蹤發現arg0大於2以後就獲取view為空。所以我猜測viewpager裡面最多有3個view,超過三個的時候就把舊的回收了。那麼當前顯示的,除了第一個和最後一個,那麼都應該是中間的那個,也就是arg0為1的那個。於是我判斷,除了第一個和最後一個,其它的arg0都等於1,發現不報錯了,但是獲取的view不對。後來通過getChildCount()方法發現,ChildCount有時候是2,有時候是3,這就讓我很頭疼了。


原來在viewpager的adapter裡面有一個方法可以獲取到當前的view,如下:

  1. private View mCurrentView;  
  2.     @Override
  3.     publicvoid setPrimaryItem(ViewGroup container, int position, Object object) {  
  4.         mCurrentView = (View)object;  
  5.     }  
  6.     public View getPrimaryItem() {  
  7.         return mCurrentView;  
  8.     }  

ViewPager的adapter通過setPrimaryItem方法設定當前顯示子view.

將其儲存下來就可以在後面通過自定義的getPrimaryItem來獲取到當前子view了。