天天看點

ViewPager如何擷取目前的子view( 解決getChildAt(position) 為null的問題)

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) {

  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,如下:

viewpager的adapter通過setprimaryitem方法設定目前顯示子view.

将其儲存下來就可以在後面通過<code>自定義的getprimaryitem</code>來擷取到目前子view了。

繼續閱讀