- 浏览: 579668 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (182)
- android/ophone开发完全讲义 (4)
- android常用代码 (6)
- android工具 (9)
- android基础 (40)
- android进阶 (75)
- android经验记录 (3)
- android框架 (2)
- android面经 (5)
- android网络 (5)
- android资讯 (0)
- android资源 (17)
- 生活印象 (3)
- androidNDK (4)
- android开源 (1)
- android性能优化 (1)
- android设计 (2)
- android博客论坛收集 (1)
- android手机用户体验 (1)
- android动画 (1)
- android外文资料 (1)
- 汉字排序 (1)
最新评论
-
小猫咪201:
困惑了很久,终于找到答案了
一个常见的android内存泄露 问题 -
王雪龙:
pixels = dps * (density / 160). ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
Turr:
楼主给力,解决了我遇到的问题
解决ActivityGroup的sub Activity中spinner的WindowManager$BadTokenException的问题 -
boyuan2000cn:
你好,我转载了您的此篇博客,如果有版权问题,请告诉我,谢谢!转 ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
twlkyao:
请教您个问题,如何将drawable对象转换为id类型?
Android中Bitmap, Drawable, Byte,ID之间的转化
package com.Yao_GUET.test; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; /** * @author Yao.GUET * blog: http://blog.csdn.net/Yao_GUET * 实现动态加载一个ListView */ public class ProcessorBarTest extends Activity { public static final int MSG_UPDATE_LIST = 18; private ListView mApps; private Context mContext; private List<String> mAppList; private ProgressDialog dialog; private ArrayAdapter mAdapter; private boolean mIsLoaded = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.processorbar_test); // ListView 列表 mApps mApps = (ListView)findViewById(R.id.lvProcessbar); mContext = this; mAppList = new ArrayList<String>(); mAdapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, mAppList); mApps.setAdapter(mAdapter); // 设置正在处理窗口 dialog = new ProgressDialog(mContext); dialog.setIcon(R.drawable.icon); dialog.setTitle("ProgressDialog"); dialog.setMessage("Please wait while loading application list..."); dialog.setCancelable(false); dialog.show(); // 开始动态加载线程 mThreadLoadApps.start(); mApps.setOnItemClickListener(new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView<?> parent, View v, int position, long id) { // TODO Auto-generated method stub mAppList.remove(position); mAdapter.notifyDataSetChanged(); } }); // 获取已经安装程序列表 PackageManager pm = mContext.getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); // 逐项添加程序,并发送消息更新ListView列表。 for (int i=0; i<list.size(); i++) { mAppList.add(list.get(i).loadLabel(pm).toString()); mAdapter.notifyDataSetChanged(); } mIsLoaded = true; } private Thread mThreadLoadApps = new Thread(){ @Override public void run() { int i = 0; // TODO Auto-generated method stub while (!mIsLoaded) { try { sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } // 关闭正在处理窗口 dialog.dismiss(); } }; }
Android逐条加载ListView,实现动画更新
在Android应用中,如果ListView或是GridView里面的数据比较多的时候,加载会比较费时间,特别是里面有图片的时候,需要花费的时间就更长,这样就会出现一个长时间的等待黑屏界面,这样有时会给用户造成一种错觉,就是这个程序已经“死”了,,, 对于这个问题可以的一个方法是,添加一个ProgressDialog,显示正在处理的窗口,等待加载完之后再关闭这个窗口, 但是这样等所有的数据加载完之后,就是特别突然的显示, 这样用户体验也不佳, 以前看Android优化大师的时候,打开进程管理的时候,它是前面显示正在加载的ProgressDialog,然后也可以看到后台的数据正在逐条加载,这样给人的感觉就好很多,现在就是要做这个效果~~~~ 主要实现的思路是这样的,新建一个线程,然后在线程里面获取已经安装的程序,再逐条把这些程序(数据)添加到缓冲数组中,再发送一个消息,更新显示ListView的内容,当线程中所有的数据已经加载完的时候,再把ProgressDialog关掉,总的完成效果如下: 程序源代码
package com.sf.test; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.widget.ArrayAdapter; import android.widget.ListView; /** * @author Yao.GUET * blog: http://blog.csdn.net/Yao_GUET * 实现动态加载一个ListView */ public class ProcessorBarTest extends Activity { public static final int MSG_UPDATE_LIST = 18; private ListView mApps; private Context mContext; private List<String> mAppList; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.processorbar_test); // ListView 列表 mApps mApps = (ListView)findViewById(R.id.lvProcessbar); mContext = this; mAppList = new ArrayList<String>(); // 设置正在处理窗口 dialog = new ProgressDialog(mContext); dialog.setIcon(R.drawable.icon); dialog.setTitle("ProgressDialog"); dialog.setMessage("Please wait while loading application list..."); dialog.setCancelable(false); dialog.show(); // 开始动态加载线程 mThreadLoadApps.start(); } private Thread mThreadLoadApps = new Thread(){ @Override public void run() { int i = 0; // TODO Auto-generated method stub // 获取已经安装程序列表 PackageManager pm = mContext.getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); // 逐项添加程序,并发送消息更新ListView列表。 for (i=0; i<list.size(); i++) { mAppList.add(list.get(i).loadLabel(pm).toString()); handler.sendEmptyMessage(MSG_UPDATE_LIST); } // 关闭正在处理窗口 dialog.dismiss(); } }; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case MSG_UPDATE_LIST: // 更新应用程序列表 mApps.setAdapter(new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, mAppList)); break; } super.handleMessage(msg); } }; }
后面发现有效率更高的方法,其实不用每次更新一项都需要构建一个Adapter的,,, 把Adapter和一个List<?>绑定在一起之后,可以直接改变List<?>的内容,然后再使用Adapter的数据集更新通知,即可改变ListView的内容,所以后面改了一下源码变成这个样子,,,
发表评论
-
Android 检查当前是否已经连接上 Internet
2012-02-27 09:28 1java代码: 1 ConnectivityManager ... -
对ContentProvider中getType(Uri uri)和android.intent.category.DEFAULT的理解
2012-02-27 09:21 1585学习了ContentProvider,想做个通讯录,结果 ... -
Android ContentProvider的介绍(很详细)
2012-02-21 17:46 139569一、ContentProvider的概念 Content ... -
一个常见的android内存泄露 问题
2012-02-20 16:11 4899最近在公司看一个算比较大的android项目的源码, ... -
一个常见的android内存泄露 问题
2012-02-20 16:10 0最近在公司看一个算比较大的android项目的源码,发 ... -
Android网络电台的一种实现方案
2012-02-20 15:12 3649随着电子产品的飞速 ... -
NotificationManager和Notification的使用总结
2012-02-16 15:55 1095这几天一直在修改twigee的源代码,其中一个要加入的 ... -
android 如何判断程序是否在前台运行
2012-02-16 15:31 5423private boolean isTopActivit ... -
Android Intent和PendingIntent的区别详细分析
2012-02-16 14:08 1518刚才一个例子中用到了PendingIntent,与之前学过的I ... -
编码问题(UTF-8、gb2312、unicode)
2012-02-14 09:38 1912相信大家很多人跟我一样,对于编码一直感觉云山雾罩,说知道吧?就 ... -
关于androidSDK登录时出现oauth2.0空白页的BUG
2012-02-09 16:21 1388在RenrenListenerFactory中,line 12 ... -
java中yield(),sleep()以及wait()的区别
2012-01-31 18:41 927往往混淆了这三个函数的使用。 从操作系统的角度讲, ... -
Toast大全(五种情形)建立属于你自己的Toast
2012-01-29 17:23 1555Toast用于向用户显示一些帮助/提示。下面我做了5中效果 ... -
Android主流屏幕分辨率介绍
2012-01-18 14:45 1395对于Android游戏开发我们不得不像iPhone那样思 ... -
关于混淆外包jar包出错的解决方法
2012-01-18 11:30 1763-optimizationpasses 5-do ... -
新浪微博SDK
2011-12-28 16:38 1161DEMO程序:http://code.google.co ... -
Android中自定义Dialog外形,去除黑底和白色边框
2011-12-08 16:29 7432在做Android开发中经常会使用到自定义样式的Dialo ... -
汉字排序
2011-12-07 09:44 1064Comparator comparator = Coll ... -
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
2011-11-29 19:29 13556在Android中,TextView是我们最常用的用来显示文本 ... -
屏幕分辨率适配
2011-10-19 18:55 3093屏幕分辨率:1024x600 d ...
相关推荐
Android 自定义ListView 4种加载动画, 左边飞入,旋转,从上飞入,透明度
点击header展开listview,再次点击收起listview,过程采用android原生动画实现。
Android ListView 实现分批加载
自定义ListView实现下拉刷新+加载更多功能Demo
通过自定义ListView实现动画特效,被点击元素A向前移,A之前元素往后移动.
android listview嵌套listview实现折叠列表
android studio实现listview的增加,左滑删除 listview以表格样式实现
网上下载的关于动态加载数据的,都是很简单,离实际使用还是存在差距。我自己写了一个,BaseAdapter也是自己定义的。 很实用的关于数据动态加载
Android中使用ListView实现汽泡短信聊天 效果及实现过程可参照小魏博客:http://blog.csdn.net/xiaowei_cqu/article/details/7045543
android--ListView实现带标题栏效果(附源码)
Android 实现ListView滚动到底部自动加载数据
android自定义listview控件 可实现下拉刷新、下拉加载更多的功能,代码比较简单,内有详细注释和实现方法,方便初学者学习
Android listview动画效果代码库,几乎包含了listview的所有动画效果,如 滑入滑出, 飞入飞出,选中列表项 点击删除后,下面的列表项会有向上push up的动画效果,以及仿iphone 滑动删除列表item项动画效果. 灵活应用该...
Android ViewPager实现画廊效果ListView Item添加动画集合
Android 使用sqllite 实现listView上拉加载,简单易懂,适合新手学习sqllite以及自定义listview
listview实现动态加载数据,值得学习
安卓Android源码——listview实现图片的异步加载.zip
Android使用ListView实现时间轴
Android实现ListView异步加载图片
Android中ListView实现表格效果