流畅滑动ListView的关键是保持应用程序的主线程(UI线程)从免于繁重处理。确保你的任何硬盘访问,网络访问或者SQL访问在一个单独的线程中。为了测试你的应用个程序的状态,你能启动StrictMode。

使用后台线程 
—————————————————————————————————————————————————————————————— 
使用一个后台线程(“工作线程”),从主线程中移除,所以它能专注于绘制UI。在许多情况下,使用AsyTask提供的简单方式,在主线程之外来执行你的工作。AsyncTask自动队列保存所有execute()请求,并连续的执行它们。这个行为对于一个进程是全局的,并且意味着你不需要担心创建你自己的线程池。 
在下面的这个示例代码中,AsyncTask是被用于在后台线程中下载图片,然后一旦完成将它们显示到UI中。当它们在下载的时候,它也在图片的位置显示了一个进度条。 
[java]
// Using an AsyncTask to load the slow images in a background thread   
new AsyncTask<ViewHolder, Void, Bitmap>() {   
private ViewHolder v;   
@Override   
protected Bitmap doInBackground(ViewHolder... params) {   
v = params[0];   
return mFakeImageLoader.getImage();   
}   
@Override   
protected void onPostExecute(Bitmap result) {   
super.onPostExecute(result);   
if (v.position == position) {   
// If this item hasn't been recycled already, hide the   
// progress and set and show the image   
v.progress.setVisibility(View.GONE);   
v.icon.setVisibility(View.VISIBLE);   
v.icon.setImageBitmap(result);   
}   
}   
}.execute(holder);<span style="font-family:Arial,sans-serif; font-size:10pt; color:windowtext"> </span>  
从Android3.0开始(API level11),在AsyncTask中有一个额外的功能,这么你能启用它来运行在多处理器核心中。替代调用execute()方法,你能调用executeOnExecutor()方法,然后基于可用的核数,多个请求能在同一时间上运行。 
在View Holder中保存视图 
——————————————————————————————————————————————————————————————
当滑动ListView的时候,你的代码应该会经常调用findViewById()方法,它会减缓性能。即使Adapter返回一个在填充视图循环使用,你一直需要寻找这个元素并更新他们。一种不错的使用findViewById()方法的方式,是使用“view holder”设计模型。 
ViewHolder对象存放了布局标记区域的视图组件,所以你能立刻访问它们,不需要重复的寻找它们。首先,你需要创建一个类来保存你需要的视图组。例如: 
[java] 
static class ViewHolder {   
TextView text;   
TextView timestamp;   
ImageView icon;   
ProgressBar progress;   
int position;   
}   
然后填充这个ViewHolder,并在这个布局中保存它。 
[java]
ViewHolder holder = new ViewHolder();   
holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image);   
holder.text = (TextView) convertView.findViewById(R.id.listitem_text);   
holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);   
holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);   
convertView.setTag(holder);   
现在你能快速访问每个视图,不需要查找,节省宝贵的处理器时间。

转载于:https://www.cnblogs.com/xiaochao1234/p/4158130.html

Android Developers:使ListView滑动流畅相关推荐

  1. Android—— ScrollView 与 ListView 滑动冲突处理

    https://blog.csdn.net/qq_29951983/article/details/80144407

  2. 转: Android ListView 滑动背景为黑色的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的 ...

  3. [Android Pro] 精确记录和恢复ListView滑动位置

    reference to : http://blog.csdn.net/welovesunflower/article/details/7926512 工作中遇到一个需求,对ListView某一项操作 ...

  4. Android在ListView滑动数据混乱

    我相信做过Android应用程序开发或多或少都遇到了这个问题.或者是在ListView数据损坏幻灯片事件.要么GridView数据损坏幻灯片事件. 让我们来看看一个网友写的文章,个人感觉还不错的文章: ...

  5. android列表滑到底部,Android中判断listview是否滑动到顶部和底部的实现方法

    今天实现listview的下拉刷新和上拉加载的时候,遇到了一个问题,*就是说需要根据listview中滑动的位置来进行下拉刷新和上拉加载.* 具体点,只有当我的listview滑动到最顶部的时候,这时 ...

  6. Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child

    android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 解决办法:主要是ScrollView内部只能有一个子元素, ...

  7. Android ListView 滑动背景为黑色的解决办法 listview小知识整理

    为什么80%的码农都做不了架构师?>>>    在别的地方看到的,转过来作为记录!! 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一 ...

  8. Android开发之ListView异步加载图片

    ListView这个控件对于大家肯定不会陌生,即使你是初学者相信也会用ListView.因为ListView这个控件实在是太常用,可以说基本上每一个项目开发都会用到它,今天这篇博客主要讲解,ListV ...

  9. android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener

    我在我的应用程序中有一个listView.对于listView中的每个元素,它都有一个Switch.以前我在listView Adapter的getView方法中为Switch实现了一个onClick ...

最新文章

  1. DB2 9 利用开辟(733 测验)认证指南,第 1 部分: 数据库工具与编程步调(6)
  2. linux setup 进步了网卡,linux 网卡修改小结
  3. R语言使用hexSticker包将lattice包可视化的结果转换为六角图(六角贴、六角形贴纸、lattice plot to hex sticker)
  4. UILabel中的多行文本
  5. 开发相关手册、STM32各种库文件、相关软件、工具连接等(不断更新)
  6. PHP 用图片输出验证码 无法正常显示
  7. 创作一个数字人,总共分几步?(上)
  8. minigui linux 安装与运行
  9. java hive demo_java 操作hive通过jdbc
  10. joomla \libraries\joomla\session\session.php 反序列化截断畸形字符串导致对象注入漏洞...
  11. python什么是调用_Python中包(package)的调用方式
  12. mysql 或hive left join不加关联条件
  13. VS配置arduino环境
  14. 贾俊平统计学思维导图- 第二章 数据搜集
  15. 短链(ShortURL)的Java实现
  16. iOS自动化-iOS录屏xrecord及解决iPhone设备不显示的问题
  17. 电话拨键号码(DTMF信号)识别
  18. new一个对象的时候发生了什么?
  19. 工商总局网监司给阿里发白皮书?一块神奇的里程碑
  20. 〖Python 数据库开发实战 - MySQL篇⑦〗- MySQL的用户管理与重设用户密码

热门文章

  1. 微软12月补丁星期二值得关注的6个0day及其它
  2. MySql数据库 - 2.启动与关闭
  3. JDBC与Mysql,Oracle数据类型之间的对应关系
  4. 庄河投资10亿元强力打造“智慧城市”
  5. UNIX环境高级编程(第三版)关于apue.h的用法
  6. 精品软件 推荐 DiskGenius专业版 磁盘管理软件 4.7 注册版本分享
  7. Google Plugin for Eclipse离线下载及安装
  8. python压缩和读取.tar.bz2格式的压缩包
  9. linux select函数用法
  10. html表格隐藏1行,js控制隐藏或显示table的某一行