在《ListView乱谈之ListView的滚动原理 》 一篇中算是详细的介绍了ListView的滚动原理,一句话简单的总结就是:在合适的时机适时地添加新的ItemView和删除原来旧的ItemView,同时对新的把新的View布局在紧邻的旧的ItemView之下或者之上。在这里进行删除原来的ItemView的时候对这些删除的ItemView进行了回收操作,以便下次反向滚动回来的时候重用之,提高ListView等的性能!下面一小段代码就是在向上滚动的时候,对上面滚动后而看不见的ItemView进行删除和回收。
// 随着ListView向上滚动,把已经看不见的ItemView从mChildView从mChildren中删除
View first = getChildAt(0);
while (first.getBottom() < listTop) {
AbsListView.LayoutParams layoutParams = (LayoutParams) first.getLayoutParams();
//为了之后在逆向滚动回来需要把这些删除的View都通过recycleBin保存起来供以后生使用
if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {
recycleBin.addScrapView(first, mFirstPosition);
}
//删除随着滚动不可见的View
detachViewFromParent(first);
first = getChil