1. 程式人生 > >Android中GridView、ListView 的 getChildAt() 方法返回null 問題解釋

Android中GridView、ListView 的 getChildAt() 方法返回null 問題解釋

開發的Android app用到了GridView或者ListView,通常使用getChildAt(int position)方法獲取當前點選或者選中的View(即position對應的View)。

  當ListView、GridView沒有滑動的時候,可以正常地獲取到index對應的View;但是當ListView、GridView滑動之後,卻獲取到null或者一個存在偏移量的View,而並不是想要獲取的View。

  問題的根源在於對getChildAt(int position)方法的理解存在錯誤。ListView和GridView採用了View回收機制。簡單來說就是如果螢幕最多可以顯示N個ChildView,那麼在記憶體中也就只存在這N個ChildView,當螢幕滾動的時候,第(N+1)個ChildView就會複用第一個View,以此類推。

所以,在GridView和ListView中,getChildAt(int position)方法的引數position指的是當前可見區域中的ChildView位置。

  如果要活的GridView的第N個ChildView,則position就是N減去第一個可見的ChildView的位置,程式碼實現如下:

1

View view = listView.getChildAt(i - listView.getFirstVisiblePosition());