ListView的理解

88 篇文章 1 订阅
74 篇文章 1 订阅
 ListView的理解:
(1) 在日常开发中使用最频繁和最复杂的控件就是ListView控件了.它有两个很神奇的地方,第一个是它可以用列表的形式展示很多很多数据,第二个是它加载了很多数据却不会导致OOM;
(2) ListView的继承关系->ListView和GridView都继承自AbsListView,可见GridView的用法和ListView差不多;
(3) Adapter的作用->为了实现低耦合,即控件和数据分开,也为了不在ListView内部去适配数据源,显得ListView类很臃肿和扩展性比较差,所以出现了Adapter机制;Adapter是在ListView和数据源之间起到桥梁作用,让ListView不会直接跟数据源打交道;而且Adapter是一个统一的接口(Interface),开发者可以自己去实现这个类来完成特定的功能;比如说,ArrayAdapter用于数组类型数据源的适配,SimpleCursorAdapter用于游标类型数据源的适配;
(4) RecycleBin机制->RecycleBin机制是ListView加载很多数据却不会OOM的最重要的一个原因;它是AbsListView类的内部类,所以ListView和GridView都能使用这个机制;
(5) 即使再简单的一个控件,在展示在界面上之前都会经历至少两次的onMeasure()和两次的onLayout()的过程,一般控件无所谓,但是ListView控件就不一样了,经历两次就会执行两次layoutChildren(),就会存在两份重复的数据到ListView中,为了防止这种现象,会调用detachAllViewsFromParent()方法去先清除所有的子View;
(6) 滑动加载更多数据:每次触摸滑动都会走到父类AbsListView类中的onTouchEvent()方法中的MotionEvent.ACTION_MOVE分支中的TOUCH_MODE_SCROLL分支中调用scrollIfNeeded()方法,该方法中又会调用trackMotionScroll(deltaY, incrementalDeltaY)方法,这个方法只要手指在屏幕上滑动就会被多次调用,该方法中会循环去判断每个子View是否移除屏幕了,通过bottom值是否小于top值,如果bottom值小于top值,说明该子View已经被移除屏幕了,手指上滑是这样,手指下滑同样的道理,然后调用offsetChildrenTopAndBottom(incrementalDeltaY);去让子View一同移动手指滑动的偏移距离;
(7) 快速滑动ListView导致乱序问题->设置tag去解决或者使用Volley的NetworkImageView,核心思想就是移除屏幕了就取消之前的异步请求,重新发起请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值