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的位置,代碼實現如下:

  

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM