原地址:http://blog.csdn.net/lks1139230294/article/details/60762403
RecylerView
- 高度自定义化的onClick事件,能够在viewHolder创建的时候为view设置监听器,通过view.setTag的方式,把dataList里面的值或者position传入view中绑定,再在监听器实现中,获取参数并回调相应的接口,并通过自定义的接口回传给外部的activity。
- layoutManager的灵活使用,支持水平线性滑动,以及瀑布流形式。
- ItemAnimator支持多种item添加以及删除动画,更好的交互效果
listView:
优:
1. OnItemClickListener
对item的点击事件能够很快相应,实现简单。
2. CursorAdapter
游标适配器能很方便与item数据绑定。
3. 能够在xml中轻松定义divider
缺:
1. item的动画,decoration与触摸交互实现起来困难
动态修改ListView
只需要调用Adapte的notifyDataChanged()方法,通知ListView更改数据源即可完成对ListView的动态修改(传进Adpater的需要是同一种数据)
ListView滑动监听
可以通过监听View的监听事件OnTouchListener中的事件发生坐标来做相应的处理:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
另外还可以用AbsListView中的OnScrollListener来进行监听,封装了很多与ListView相关的信息,用起来更加灵活。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
具有弹性的ListView
增加HeaderView或嵌套ScrollView,最简单的是重写ListView中的overScrollBy()方法,将maxOverScrollY参数修改成我们自己的就行了。为了适配分辨率问题,可以通过屏幕的density来计算具体的值,让不同分辨率的弹性基本保持一致:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
自动显示、隐藏ListView
借助View的OnTouchListener接口来监听ListView的滑动,接着通过比较上次的坐标大小来判断上滑还是下滑。另外,为避免第一个item被ToolBar遮挡,首先要给ListView增加一个HeaderView:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
ListView的优化
几种常用的Adapter:
ArrayAdapter:简单易用的Adapter,通常用于数组或list集合的数据源(多个值包装成多个列表项)。
simpleAdapter:并不见得、功能强大的Adapter,可用于list集合的多个对象包装成多个列表项。
simpleCursorAdapter:与上相似,但是用于包装jCursor(数据库游标)提供的数据源。
BaseAdapter:通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。
优化
一:使用convertView使用,listivew每次滚动都会调用gitview()方法,主要优化加载布局问题,
二:使用内部类ViewHolder新增加内部类ViewHolder,用于对控件的实力存储进行缓存,主要优化加载控件
三:google推荐优化,1+2实现
四:item布局不宜过深
五:对ListView中数据的分批及分页加载:
需求:ListView有一万条数据,如何显示;如果将十万条数据加载到内存,很消耗内存
解决办法:
优化查询的数据:先获取几条数据显示到界面上
进行分批处理—à优化了用户体验
进行分页处理—à优化了内存空间
说明:
一般数据都是从数据库中获取的,实现分批(分页)加载数据,就需要在对应的DAO中有相应的分批(分页)获取数据的方法,如findPartDatas ()
1、准备数据:
在dao中添加分批加载数据的方法:findPartDatas ()
在适配数据的时候,先加载第一批的数据,需要加载第二批的时候,设置监听检测何时加载第二批
2、设置ListView的滚动监听器:setOnScrollListener(new OnScrollListener{….})
①、在监听器中有两个方法:滚动状态发生变化的方法(onScrollStateChanged)和listView被滚动时调用的方法(onScroll)
②、在滚动状态发生改变的方法中,有三种状态:
手指按下移动的状态: SCROLL_STATE_TOUCH_SCROLL: // 触摸滑动
惯性滚动(滑翔(flgin)状态): SCROLL_STATE_FLING: // 滑翔
静止状态: SCROLL_STATE_IDLE: // 静止
3、对不同的状态进行处理:
分批加载数据,只关心静止状态:关心最后一个可见的条目,如果最后一个可见条目就是数据适配器(集合)里的最后一个,此时可加载更多的数据。在每次加载的时候,计算出滚动的数量,当滚动的数量大于等于总数量的时候,可以提示用户无更多数据了。