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,如下:
- private View mCurrentView;
- @Override
- publicvoid setPrimaryItem(ViewGroup container, int position, Object object) {
- mCurrentView = (View)object;
- }
- public View getPrimaryItem() {
- return mCurrentView;
- }
ViewPager的adapter通過setPrimaryItem方法設定當前顯示子view.
將其儲存下來就可以在後面通過自定義的getPrimaryItem
來獲取到當前子view了。