仍然在以前那个Demo基础上,新添加了一些功能:(基于原文教程-http://blog.csdn.net/android_ls/article/details/8896692)--大概Demo里面的内容就是到原文的该教程为止
这两天新增功能:
1.新鲜事之下拉列表(在PopupWindow基础上的过滤列表)
---根据过滤列表的选择,分类显示不同类型(FeedType)的信息
遇到的问题:(上次有写到)
1.1 PopupWindow时卡死不动,原因:PopupWindow必须要设置一张背景,要不然就会卡死不动(不知道为什么会有好、这种设定)
1.2 PopupWindow 里面的ListView设置监听无效,原因:ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,事件会被子View捕获到,ListView无法捕获处理该事件。
解决方法:在checkbox、button对应的view处加android:focusable="false" android:clickable="false"android:focusableInTouchMode="false"其中focusable是关键
2.新鲜事之分享照片(以及上传照片)
---重新写了一个Layout,专门用来显示附加媒体Attachment里面的Photo信息(这里做了简易处理,所以只显示里面的一张图片-做好点应该是动态显示多张)
遇到的问题:
2.1 网络请求JSON,当网络请求次数超过一定值,JSON一直返回是{}---空值
原因:里面刷新LIstView时用了一个全局参数page,每次刷新page++,但是page是一个请求的网络参数,当page大于一定值时,网站本身就没有json可以返回。所以会一直为空,
解决方法:当切换类型时,将page重置。
关于线程池的用法:构造方法
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
当一个任务通过execute(Runnable)方法欲添加到线程池时:
l 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
l 如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
l 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
l 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
l 当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
未来展望:完整的显示新鲜事里面的所有类型的信息。。。
---2014/12/10日更新---
1.对以前的代码做了些许调整,优化
2.ListView换位一种开源组件XListView(自动实现下拉加载更多,上拉刷新功能)
3.增加新鲜事其它模块的实现,如 Blog,Status,Photo等分类(下次准备在增加一个Video---自己写VideoLoader装载VideoView组件)
---2014/12/11日更新---
1.个人主页的实现(写实体类才是最大的体力活)
2.程序之外的事(11日看了星级穿越,觉得这电影挺不错的,于是上网搜了里面的理论支持,发现里面很多都是用的弦理论以及M理论,于是又去百度,看了优雅的宇宙这个系列视频,真的挺赞的---至少对于我这种物理盲来说,还是很脑补的。毕竟生活中不仅有程序,还有太多的其它。了解宇宙未知也是人类的本性。。。)
本次DEMO地址:http://download.csdn.net/detail/u010979495/8241643