转 android Listview,gridview局部刷新,部分刷新 (仿QQ动态评论局部刷新)
2015-09-23 00:22
585 查看
转自:http://blog.csdn.net/jdsjlzx/article/details/45582719
众所周知Listview和Gridview的刷新界面的方式是调用adapter.notifyDataSetChanged()进行界面刷新。
但是此方法有其弊端,他是将界面中的数据全部刷新一遍,不论数据有没有变化。如果listview加载了很多的数据(如:100条)
在进行刷新时就会造成很大的系统开销如何像qq空间个人动态那样点赞只刷新一条呢:
主要原理:
对listview的某一个item进行刷新
1.要获取要刷新的item当前索引position和数据
2.对获取的数据进行重置
3.将重置的数据放到adapter中的数据集的原来的位置(根据position刷新原数据集的某一条数据)
4.在listview中获取需要刷新的子item的view
5.从更新过的数据集中获取新数据,更新viwe中的数据(handler中操作,实现界面的刷新)
功能如下,代码中有详细注释:
[java] view plaincopy
publicclassextends privatenull private private
protectedvoid super new new
publicvoidintlong
, item.getData() +
* 初始化数据
*/ privatevoid new forint; i < ; i++)
new * 自定义item数据类型
*/ class * 数据id
*/ privateint * 数据
*/ private publicint return publicvoidint this public return publicvoid this }
activity进行调用,功能操作主要封装在adapter中如下:
[java] view plaincopy
publicclassextends * listview中的数据集
*/ private private private public this this * 设置listview对象
*
* @param lisv
*/ publicvoid this * update listview 单条数据
*
* @param item 新数据对象
*/ publicvoid int;
forint; i < mDataList.size(); i++)
if
()
privatenew publicvoid * 刷新指定item
*
* @param index item在listview中的位置
*/ privatevoidint ifnull return
int
publicint
return
publicint
return
publiclongint
return
publicint
ifnull null return }
众所周知Listview和Gridview的刷新界面的方式是调用adapter.notifyDataSetChanged()进行界面刷新。
但是此方法有其弊端,他是将界面中的数据全部刷新一遍,不论数据有没有变化。如果listview加载了很多的数据(如:100条)
在进行刷新时就会造成很大的系统开销如何像qq空间个人动态那样点赞只刷新一条呢:
主要原理:
对listview的某一个item进行刷新
1.要获取要刷新的item当前索引position和数据
2.对获取的数据进行重置
3.将重置的数据放到adapter中的数据集的原来的位置(根据position刷新原数据集的某一条数据)
4.在listview中获取需要刷新的子item的view
5.从更新过的数据集中获取新数据,更新viwe中的数据(handler中操作,实现界面的刷新)
功能如下,代码中有详细注释:
[java] view plaincopy
publicclassextends privatenull private private
protectedvoid super new new
publicvoidintlong
, item.getData() +
* 初始化数据
*/ privatevoid new forint; i < ; i++)
new * 自定义item数据类型
*/ class * 数据id
*/ privateint * 数据
*/ private publicint return publicvoidint this public return publicvoid this }
activity进行调用,功能操作主要封装在adapter中如下:
[java] view plaincopy
publicclassextends * listview中的数据集
*/ private private private public this this * 设置listview对象
*
* @param lisv
*/ publicvoid this * update listview 单条数据
*
* @param item 新数据对象
*/ publicvoid int;
forint; i < mDataList.size(); i++)
if
()
privatenew publicvoid * 刷新指定item
*
* @param index item在listview中的位置
*/ privatevoidint ifnull return
int
publicint
return
publicint
return
publiclongint
return
publicint
ifnull null return }
相关文章推荐
- Android自定义控件——手把手教你写出Google样式的ProgressBar
- [转][Android] ListView中getView的原理+如何在ListView中放置多个item
- SlidingUpPanel
- android控件-View整理
- android 控件-TextView用法整理
- android控件-ImageView使用方法整理
- Android Service学习篇二:Service启动方式之startService
- android Junit
- Android学习实践:4.让Activity全屏及改变文字和背景颜色
- android中的style部分属性值介绍
- android的散知识
- android 点击屏幕关闭 软键盘
- Android头部悬浮ListView第二种实现方式
- Android 沉浸式状态栏攻略 让你的状态栏变色吧
- android monkey
- Android 免Root实现Apk静默安装,覆盖兼容市场主流的98%的机型
- Android 免Root实现Apk静默安装,覆盖兼容市场主流的98%的机型
- android JNI开发C++代码对assets文件的访问
- Android视图SurfaceView的实现原理分析
- Android布局详解之一:FrameLayout