listview初印象

 以下文章全根据自己的学习笔记和自己的测试代码手打,而且在手机上码的字,将近写了一个小时边整理边写的,欢迎大家拷贝转载,有解释错误的地方也欢迎大家提出,一起学习,谢谢!我所有笔记的测试代码都在本人的GITHUB和git.oschina中同步更新,有兴趣可以拷贝,全是公开的权限!本文的测试代码的url: https://git.oschina.net/wuxinchao/SQLiteCreate.git
     今天上午到公司上发现自己放在git.oschina的单元测试项目有人下载并在issues中对该项目提出了问题,评论后重新在项目的readme文件中修改了项目说明,在代码中添加了注释后重新提交了一次代码后关闭了该issue。

      以前没接触Android开发看到别人进行Android开发时经常对界面加载数据量过大显示过慢头疼不已,也看到过完成的软件界面在加载数据显示的界面卡死!后来是用了一种分布查询数据库的方式加载的,比如先查询50条数据,然后拉到底部的时候触发事件再查询下面50条,理论上确实解决了之前的问题,但是这样的数据交互即便是把数据放在缓存中分页读取也会让用户看到加载的过程(卡顿),现在listview标签完美的解决了这一问题。
     

listview

标签是以一种mvc模式进行数据展示的控件,下面我来简单介绍下我现阶段学习到的这个控件的的用法和底层实现,首先,我们在界面layout中引入此控件并给予id,同样的在此layout的activity中通过id获取到,获取到后对这个ListView执行setAdapter(adapter)方法,现在重点讲解下此该方法的参数(adapter),该参数是一个ListAdapter的接口类型的参数,简单点来做,我们需要定义一个内部类去实现这个接口并实现该接口的方法,我看了下这个接口中有好几十个方法,后来发现有一个BaseAdapter的抽象方法已经实现了该接口,所以我们只需要继承该抽象类并重写其下的几个方法:
我们需要重写的第一个方法叫getCount(),它返回的是一个int值,该值是用来控制listview中总共有多少条目,一般都是等于你查询到的数据集合的数量;
我们需要重写的第二个方法叫getView(...),它有三个参数,我们在此文中只使用第一个参数,它是一个int类型的参数,这里就用position表示,position代表的是当前数据在集合中的位置,(在这里我模拟在界面上要显示的是一群人的信息,集合personlist中存放的就是Person类型的数据),我们定义这个person = personlist.get(position),以上方法就是得到了在position这个位置对应的Person对象,接下来我们在此方法中定义一个TextView组件,将每个Person对象setText进去,在方法的最后我们return这个TextView对象。以上就是我们在继承BaseAdapter的内部类中做的全部操作,我们只要实例化该类放到之前的方法中即完成了一个一张以ListView控件展现数据的页面。
接下来我们说说原理和它的实现方式,我们先前讲到它是以mvc模式实现的数据展现,m数据模型就是查询得到的list数据集合,v视图层就是layout中的ListView标签,c控制器就是Adapter数据适配器。我们在getView中打印position这个值,会打印出从0~n的值,有的手机打印从0~20条,有的手机可能打印从0~30条多,然后我们用手指在手机界面将数据往下拉就会发现在后台又会打印出新的值,拉的多打印的多,然后在屏幕上向上滑又会打印出之前打印过的值,都是拉了几条就打印了几个连续的不同的值。这些值对应的就是你手机屏幕上的每条信息所对应的位置,listview对象会根据你手机屏幕的长度自动匹配显示你手机上能显示的数据量,并在第一次加载时显示这么多,然后你往下拉的时候java的gc回收机制会将上面的值回收掉,往上拉的时候会把下面的值再回收掉,所以在界面上显示的永远是一个屏幕的值量,listview会通过position位置去显示当前的这些值,所以流畅度非常高!总之一句话,只有当有新的View对象要被显示时才会调用getView方法把新的View对象创建展现到界面,该View在这里就是代表一个person信息。今天就先分享学习笔记这么多,欢迎提出宝贵的意见和建议。


你可能感兴趣的:(listview初印象)