使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据.
这时候就要注意了:
......
private ArrayList<HashMap<String, Object>> usersList;
......
usersList= query(......); //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList
sAdapter.notifyDataSetChanged();
......
如果你也是: 上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式:
......
//usersList= query(......);
usersList.clear();
usersList.addAll(query(......));
sAdapter.notifyDataSetChanged();
///////////////////////////////////////////////////////////////////////////////////////
原因是: sAdapter会通过usersList获取List中的内容。但是实际上可能(也应该)是,在调用super(MyActivity.this, R.layout.item, usersList)时sAdapter保存了usersList指向原List(假设为List a)的引用,在调用query函数之后,usersList指向了一个新的List(List b)。但是在调用notifyDataSetChanged()时,sAdapter会跟据保存的引用(即指向List a的引用)去更新,因此当然还是原来的结果,不会进行更新。
如果大家也出现这种情况可以使用后者去刷新ListView, 应该就没问题了
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
一. 异步任务
异步任务可以适当的/ 易用与UI 线程当中,这个类允许执行后台操作,并在不操作线程和handler 的情况下将处理后的数据返回给UI 线程。
异步任务的设计是线程类(Thread )和Handler 类的一个辅助类,该类并不构成通用线程框架。异步任务建议在处理耗时较短的操作上使用(以秒单位的操作上),如果需要线程需要处理耗时较长的操作,建议使用java 中java.util.concurrent 包中的Executor ,ThreadPoolExecutor 和FuturTeask 类。
异步任务类是个抽象类,使用时必须使用子类,并在子类中必须重写doInBackground() 方法。
(1 )当异步任务执行过程中,可以分为下4 步:
1.onPreExecute()
异步任务开始执行时直接调用这个方法。(即execute() 调用后)这个方法里功能通常所让UI 中显示进度条。
2.doInBackground(Params …)
该方法在onPreExecute() 执行完后直接执行,UI 中的参数直接传递到这个方法中,参数被处理后有这个方法传递给最后的一个方法(onPostExecute() 方法)。同时在处理过程中通过调用publishProgress() 方法可以,引发onProgressUpdate 方法的调用
3.onProgressUpdate(Progress …)
更新UI
4.onPostExecute(Result)
后台处理完成后执行该方法。后台数据传递给该方法。
(2 )取消任务
在任何时候只要执行cancel(boolean) 方法,当前任务就会被取消,随后引发isCancelled() 方法的执行,该方法返回true.isCancelled() 方法执行之后,任务不再执行onPostExecute() ,而是执行onCancelled(Object) 方法。
注意:
1. 异步任务在UI 线程中被声明。
2. 异步任务在UI 线程中被启动执行。
3. 不需要手动调用onPreExecute()/onPostExecute()/doInBackground() 等方法。
4. 异步任务只能启动一次,试图启动两次会抛出异常。
参数的类型
AsyncTask<Params, Progress, Result>
1.Params 由UI 线程传递给后台操作的数据类型(即execute() 方法的参数类型)
2.Progress 后台处理过程中的数据类型(即publishProgress() 和onProgressUpdate 参数接受的类型)
3.Result. 后台处理后结果的返回类型。
这些内容都是帮助文档的内容。有不准确的地方还请指出来。
参考:http://tech2ipo.com/54655
移动应用开发者们,Attention please!在接下来的内容里,我们将介绍一些能够提高你们的应用的知名度和品质水平的工具。
仔细看看,下面这些工具你们都知道吗,用过吗?如果你还不知道,或许可以尝试一下。
一、运营类
1. APPVIEW,网址:http://lab.hakim.se/appview/
帮助iOS 应用开发者追踪所有地区App Store最近的用户评论,可以按时间、评分、地区排序,缺点是可能更新较慢,评论不全。
2. AppBrain,网址:http://www.appbrain.com/
可以在此查看Android应用在应用商店的用户评论,更新及下载量变化。
3. appFigures,网址:https://www.appfigures.com/
优点:功能很全,授权后可以查看app的销售、iAds、排名、评论信息,可以以可视化的图表形式展示,支持AppStore与Google Play。缺点:免费用户功能较少。
4. App Annie,网址:http://www.appannie.com/
很强大的工具,但是部分功能需要免费注册后登录才能使用,可以用来查看每天的排名及历史变化信息,是否被各地区的App Store推荐以及获得推荐的历史记录等信息。
5. XYOLOGIC,网址:http://xyologic.com/#
可以查询Android、iOS、WP7甚至GoogleTV的app信息,有模糊的总下载量及当月下载量 ,网站上显示有BlackBerry的数据,但目前尚不可用。
6. Flurry,网址:http://www.flurry.com/
这是目前比较有名的一家了,很多企业的分析数据都来自这家网站。
二、原型制作类工具
1. Axure RP,这是我最熟悉的一个原型设计软件,也是windows上目前最常用的原型设计软件了,简单易用,上手快,功能强大。国内已有许多视频教程,这里送上中文汉化包下载地址:http://www.axure.us/283/
2. Pencil Project,是一个比较小的工具,firefox浏览器的插件,安装地址:https://addons.mozilla.org/en-US/firefox/addon/pencil/ (记得使用firefox浏览器)
3. OmniGraffle,这个软件只有Mac版本,但是可以用它制作出丰富绚丽的界面,值得尝试一下。下载地址:http://www.omnigroup.com/products/omnigraffle/ 也可以在Mac App Store下载。
4. MockingBot,这是一个在线的iOS产品原型设计工具,有免费版本的也有两种付费版本的,注册后即可使用免费版的,可根据需要选择相应版本。网站地址:https://mockingbot.com/
三、移动产品交互设计素材类
1. Mobile UI Patterns,可以按照部件类型进行查找,种类比较齐全。网址:http://mobile-patterns.com/
2. Inspired UI,也可以按所需部件类型进行查找,网站风格比较清新。网址:http://inspired-ui.com/
3. Lovely ui,多整理收集了不少UI素材图片,有分类标签。网址:http://www.lovelyui.com/
4. Mobile Design Pattern Gallery,这个网址的确比较长...但内容还不错,但是量不多。此外网站还介绍了一本叫做《Mobile Design Pattern Gallery》的书,也许对开发者有用。网址:
http://www.mobiledesignpatterngallery.com/mobile-patterns.php
5. pttrns,网站提供一些比较精美的大图,内容也还不错。网址:http://pttrns.com/
6. Patterns of Design,主要提供iPhone和iPad两个平台的素材,网址:http://www.patternsofdesign.co.uk/
7. 4ourth Mobile Design Pattern Library,我只看到网页顶端写着“mobile patterns wiki”,具体如何,我也不懂,感兴趣可以去看看。网址:http://4ourth.com/wiki/Index
8. android pttrns,看名字就猜到主要是为Android平台收集的。网址:http://androidpttrns.com/
工欲善其事必先利其器!以上介绍的这些开发运营工具都是我从各个地方整理而来的,希望对移动开发者们有所帮助。