- 浏览: 586611 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1638学习了ContentProvider,想做个通讯录,结果 ... -
Android ContentProvider的介绍(很详细)
2012-02-21 17:46 139696一、ContentProvider的概念 Content ... -
一个常见的android内存泄露 问题
2012-02-20 16:11 4946最近在公司看一个算比较大的android项目的源码, ... -
一个常见的android内存泄露 问题
2012-02-20 16:10 0最近在公司看一个算比较大的android项目的源码,发 ... -
Android网络电台的一种实现方案
2012-02-20 15:12 3681随着电子产品的飞速 ... -
NotificationManager和Notification的使用总结
2012-02-16 15:55 1143这几天一直在修改twigee的源代码,其中一个要加入的 ... -
android 如何判断程序是否在前台运行
2012-02-16 15:31 5457private boolean isTopActivit ... -
Android Intent和PendingIntent的区别详细分析
2012-02-16 14:08 1571刚才一个例子中用到了PendingIntent,与之前学过的I ... -
编码问题(UTF-8、gb2312、unicode)
2012-02-14 09:38 1961相信大家很多人跟我一样,对于编码一直感觉云山雾罩,说知道吧?就 ... -
关于androidSDK登录时出现oauth2.0空白页的BUG
2012-02-09 16:21 1430在RenrenListenerFactory中,line 12 ... -
java中yield(),sleep()以及wait()的区别
2012-01-31 18:41 959往往混淆了这三个函数的使用。 从操作系统的角度讲, ... -
Toast大全(五种情形)建立属于你自己的Toast
2012-01-29 17:23 1599Toast用于向用户显示一些帮助/提示。下面我做了5中效果 ... -
Android主流屏幕分辨率介绍
2012-01-18 14:45 1423对于Android游戏开发我们不得不像iPhone那样思 ... -
关于混淆外包jar包出错的解决方法
2012-01-18 11:30 1797-optimizationpasses 5-do ... -
新浪微博SDK
2011-12-28 16:38 1199DEMO程序:http://code.google.co ... -
Android中自定义Dialog外形,去除黑底和白色边框
2011-12-08 16:29 7472在做Android开发中经常会使用到自定义样式的Dialo ... -
汉字排序
2011-12-07 09:44 1096Comparator comparator = Coll ... -
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
2011-11-29 19:29 13654在Android中,TextView是我们最常用的用来显示文本 ... -
屏幕分辨率适配
2011-10-19 18:55 3140屏幕分辨率:1024x600 d ...
相关推荐
5. **更新Adapter**:加载到新的数据后,将数据添加到原有数据列表,然后调用`notifyDataSetChanged()`通知ListView数据已更新。 6. **优化性能**:在`getView()`方法中进行视图复用(ViewHolder模式),减少视图...
本篇将深入探讨如何为Android ListView实现四种不同的加载动画:左边飞入、旋转、从上飞入以及透明度变化。 首先,我们需要理解ListView的工作机制。ListView通过ViewHolder模式来提高性能,避免频繁的视图创建和...
3. **动画实现**:Android提供了多种动画库,如Animation和Animator,用于创建平滑的视觉效果。在这个场景下,我们可以使用TranslationAnimation或者ObjectAnimator来改变子项的高度,从而模拟折叠或展开的动作。...
在Android开发中,自定义ListView实现下拉刷新和加载更多的功能是常见的需求,尤其是在构建具有数据流滚动和实时更新的应用程序时。这个"自定义ListView实现下拉刷新+加载更多功能Demo"旨在帮助开发者理解如何集成...
`loadMoreData()`方法中,你需要实现加载新数据的逻辑,并在加载完成后更新ListView的数据源。最后,记得更新isLoadingMore变量为false,以便下次滚动时可以再次触发加载。 三、自定义ListView 在提供的`...
因为ListView在滚动时会复用View,所以我们需要确保在onBindViewHolder或getView方法中正确地更新每个可见列表项的状态,以保持动画效果的连贯性。 在实际项目中,"horImageListView"可能表示这是一个包含横向滚动...
4. **执行刷新逻辑**: 在接收到刷新请求后,执行后台数据加载任务,完成后更新`Adapter`的数据并调用`ListView#onRefreshComplete()`来停止刷新动画。 **上拉加载更多**(Load More)功能则是在用户滚动到列表底部...
总之,实现Android ListView滚动到底部自动加载数据涉及到的主要步骤包括:设置适配器、监听滚动事件、判断是否滚动到底部、加载新数据和更新列表。这个过程需要对Android的基础组件和数据操作有深入的理解,同时也...
本文将详细介绍如何在Android中使用ListView实现嵌套的可折叠效果。 首先,我们需要了解基本的ListView工作原理。ListView通过Adapter来绑定数据源,Adapter负责将数据转化为ListView可显示的View。在Android中,...
以下是一个关于如何在Android中实现ListView上拉加载的详细步骤: 1. **判断加载时机**: 在实现上拉加载时,我们需要监听ListView的滚动事件。通过设置OnScrollListener,当ListView的lastVisibleItem等于...
在Android应用开发中,ListView是常用的视图组件,它允许我们展示大量的数据并进行滚动操作。这个压缩包“Android应用源码ListView 实现点击侧边A-Z快速查找”提供了实现了一个功能,即通过点击侧边的字母栏快速定位...
在Android开发中,创建引人入胜的用户体验是至关重要的,而`ViewPager`和`ListView`结合使用可以实现丰富的交互式界面。`ViewPager`通常用于实现页面滑动效果,类似于画廊中的图片浏览,而`ListView`则常用于展示可...
总结来说,实现Android的ListView嵌套ListView需要理解ListView的工作机制,创建并管理两个Adapter,以及在布局文件中正确地嵌套ListView。这虽然不是特别高深的技术,但却是Android开发中常见的需求,熟练掌握能...
在Android开发中,ListView是一...综上,"ListView实现动态加载"涵盖了Android开发中的数据适配、视图复用、异步加载、滚动监听、内存优化等多个重要知识点。熟练掌握这些技巧,对于构建流畅、高效的列表界面至关重要。
"Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...
在本文中,我们将深入探讨如何在Android Studio中实现ListView的动态增加以及左滑删除功能,这将帮助你构建更加用户友好的应用程序。 首先,我们需要创建一个ListView的基础结构。在Android Studio中,打开布局XML...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式。它具有高度可定制性,能够实现各种自定义布局和交互效果。本教程将深入讲解如何实现一个基本的ListView,并在用户点击列表项时跳转到...
Android listview动画效果代码库,几乎包含了listview的所有动画效果,如 滑入滑出, 飞入飞出,选中列表项 点击删除后,下面的列表项会有向上push up的动画效果,以及仿iphone 滑动删除列表item项动画效果. 灵活应用该...
"android开发实现加载时动画跳动和listview动态增加一行控件"这个主题聚焦于两个核心知识点:加载动画的实现以及ListView的动态加载功能。 首先,加载时的动画跳动效果是提高用户交互性的一种策略,它能提供一种...
总之,实现“android ListView 动画加载每一项”涉及了自定义Adapter、ViewHolder模式、动画的创建和应用,以及可能的懒加载策略。通过这种方式,我们不仅可以优化性能,还能为用户提供更具吸引力的交互体验。