您的位置:首页 > 移动开发

[项目总结]应用市场app

2016-11-14 23:01 295 查看

项目简介

这是一款下载应用和游戏的软件。具备用户登录,应用包管理,检查更新,设置,查看应用和游戏详情等主要功能。

项目实现过程

封装BaseActivity,记录当前打开的Activity,配合一键退出应用(两种方法:1:调用finish所有activity的方法,2:发送广播finish所有activity)

ActionBar+DrawerLayout

ActionBar添加搜索按键,返回按钮的处理

主界面actionBar 上添加控制抽屉的开关

DrawerLayout使用ActionBarDrawerToggle和actionBar关联

ViewPager+PagerTabStrip

ViewPager实用自带的PagerTabStrip实现、首页、应用、游戏、专题、分类、排行页面

ViewPager+Fragment

封装BaseFragment,SwipeRefreshLayout下拉刷新,制定子类要实现的方法

FragmentFactory,把Fragment存放到集合,复用

封装LoadingPager,app的显示框架

四种界面: 加载中, 加载错误,加载为空 ,加载成功

根据不同的状态去切换界面

ViewPager默认加载3页的关系,复用LoadingPager

封装BaseProtocol,访问服务器加载页面的数据,把数据缓存到本地,复用本地缓存框架

加载成功界面的显示

listView的使用

应用界面listView头部添加一个轮播图View

SwipeRefreshLayout下拉刷新,listView底部加载更多

listView的优化

封装listView的adapter(DefaultAdapter),listView的adapter的框架

adapter的优化,Viewholder的复用

快速滑动的时候不加载图片

封装BaseHolder,以BaseHolder为模块显示

应用和游戏详情界面的实现,继承BaseHolder以模块显示组成界面

使用值动画对应用是否安全和应用简介模块显示或收起

用户登录模块,继承BaseProtocol请求数据,继承BaseHolder以模块显示

排行页面

自定义View实现不规则textView的摆放

设置界面的实现

是否自动更新功能

同时下载任务数量功能

安装包管理界面的实现

listView显示当前应用下载的安装包

点击listView条目跳转安装

长按listView条目,弹出批量删除选项

检查更新的实现

popupWindow友好提示

Dialog显示更新详情和版本

关于模块的实现Dialog显示详情和版本

下载应用和游戏模块的实现,主页面点击下载后显示自定义进度条

使用观察者设计模式实现,主界面和应用详情页的下载进度,暂停,等待下载,下载失败,下载完成的统一

线程池的使用,供整个app耗时操作使用,结合设置模块控制同时下载任务数量功能

项目的特点和使用到的开源library

app框架的设计

java面向对象的特点,类的封装

listView不同的条目的复用

使用的设计模式

工厂设计模式

单例设计模式(主要是懒汉式)

观察者设计模式

开源library:xUtils

项目遇到的问题

由于ViewPager默认加载3页面,在复用LoadingPager时报了个illegalstateexception(The specified child already has a parent)异常,原因就是由于使用FragmentFactory缓存了Fragment,导致ViewPager回收页面时Fragment并没有销毁,当再次加载被回收的页面时,复用了Fragment,但此时Fragment里的LoadingPager已经存在父View,导致程序崩了。

解决方法就是移除 LoadingPager之前的父View

public static void removeParent(View v){
//  先找到父View 再通过父View去移除孩子
ViewParent parent = v.getParent();
//所有的控件 都有父View  父View一般情况下 就是ViewGoup
if(parent instanceof ViewGroup){
ViewGroup group=(ViewGroup) parent;
group.removeView(v);
}
}


listView不同的条目的复用

由于一开始只是根据position和datas.size()+1判断复用条目,但这样只是复用一个条目,并没有真正复用不同的条目,并且可能会出现一些未知的bug

解决方法:根据Google官文档,复写两个方法,原理就是分配两个公共内存,根据不同标记复用:

//返回不同条目类型
@Override
public int getItemViewType(int position) {
...
return getInnerItemViewType(position);
}
//添加复用的listView条目
@Override
public int getViewTypeCount() {
return super.getViewTypeCount() + 1;
}


listView的复用导致主页面数据错乱

解决方法:主页面的下载进度,暂停等状态是根据被观察者回调刷新界面的,而每个listView的条目的数据都带有一个ID,根据被观察者回调传的数据判断是否和listView的条目的数据ID是否同一个刷新界面

项目部分图片:





项目地址:https://github.com/bullWing/ApplicationsPaly
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: