首先看到的是这款APP,它的外形如下图所示:

当我们第一次安装该软件时,第一次打开,进入的是导航页面,导航页面采用的是ViewPager+viewpagerindicator+Activity实现侧滑导航页的效果,而以后打开进入的是启动页面此效果采用的是SharedPreferences,实现代码如下:

package com.zking.sj_test_android;import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;public class WelcomeActivity extends AppCompatActivity {private boolean isFirstUse;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_welcome);//表示当前存储的状态可以被其他文件读取SharedPreferences preferences=getSharedPreferences("isFirstUse", MODE_WORLD_READABLE);//定义isFirstUse初始状态为trueisFirstUse=preferences.getBoolean("isFirstUse", true);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubif(isFirstUse==true)   //isFirstUes为true,跳转到IndicatorActivity,这个activity就是导航页{Log.i("test","aa"+isFirstUse);Intent intent1=new Intent(WelcomeActivity.this,IndicatorActivity.class);WelcomeActivity.this.startActivity(intent1);WelcomeActivity.this.finish();}else{Log.i("test","bb"+isFirstUse);//否则跳转到首页Intent intent=new Intent(WelcomeActivity.this, SplashActivity.class);WelcomeActivity.this.startActivity(intent);WelcomeActivity.this.finish();}}},0);SharedPreferences.Editor editor = preferences.edit();//存入数据,改写成false,下次启动就不会再进入导航页了editor.putBoolean("isFirstUse", false);//提交修改editor.commit();}
}

主页面采用ViewPager+fragment,碎片全城策划采用的布局LinearLayout+GridLayout实现的

报名阶段,科目二,科目三,新手上路,发现都是加载静态网页实现的,主要代码如下

package com.zking.sj_test_android;import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;public class Newuser1Activity extends AppCompatActivity {private WebView webview;private View mErrorView;private WebSettings mWebSettings;private RelativeLayout loading_over;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_newuser1);webview = (WebView) findViewById(R.id.webview);webview = (WebView) findViewById(R.id.webview);loading_over = (RelativeLayout) findViewById(R.id.loading_over);setUpView();findViewById(R.id.id).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AndroidShare androidShare = new AndroidShare(Newuser1Activity.this);androidShare.shareOthers("标题", "Although it rains, throw not away your watering pot.", AndroidShare.TEXT, null);}});findViewById(R.id.back).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}private void setUpView() {webview.loadUrl("file:///android_asset/www/jiazhao/jiazhao.html");//设置WebView属性,能够执行Javascript脚本mWebSettings = webview.getSettings();mWebSettings.setJavaScriptEnabled(true);    //允许加载javascriptmWebSettings.setSupportZoom(true);          //允许缩放mWebSettings.setBuiltInZoomControls(true);  //原网页基础上缩放mWebSettings.setUseWideViewPort(true);      //任意比例缩放webview.setWebViewClient(webClient);  //设置Web视图}/**** 设置Web视图的方法*/WebViewClient webClient = new WebViewClient(){//处理网页加载失败时public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {showErrorPage();//显示错误页面};};boolean mIsErrorPage;protected void showErrorPage() {LinearLayout webParentView = (LinearLayout)webview.getParent();initErrorPage();//初始化自定义页面while (webParentView.getChildCount() > 1) {webParentView.removeViewAt(0);}@SuppressWarnings("deprecation")LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewPager.LayoutParams.FILL_PARENT, ViewPager.LayoutParams.FILL_PARENT);webParentView.addView(mErrorView, 0, lp);mIsErrorPage = true;}/***** 把系统自身请求失败时的网页隐藏*/protected void hideErrorPage() {LinearLayout webParentView = (LinearLayout)webview.getParent();mIsErrorPage = false;while (webParentView.getChildCount() > 1) {webParentView.removeViewAt(0);}}/**** 显示加载失败时自定义的网页*/protected void initErrorPage() {if (mErrorView == null) {mErrorView = View.inflate(this, R.layout.activity_error, null);RelativeLayout layout = (RelativeLayout)mErrorView.findViewById(R.id.online_error_btn_retry);layout.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {webview.reload();}});mErrorView.setOnClickListener(null);}}
}

紧接着是科目一,和科目四,他们的布局采用的是LinearLayout+GridLayout

*顺序练习,随机练习,章节练习,专项练习的数据绑定基本上是差不多的,像顺序练习的查询语句“SELECT FROM +表名”随机练习的查询语句“SELECT * FROM +表名 + ORDER BY random()”章节练习和专项练习的查询语句“ SELECT * FROM web_note where +列名=值 ”
开始答题,答题页面采用的 ViewPager+Frament,碎片里采用了TextView+RadioGroup+RadioButton+ScrollView**

当你答对,RadioButton中setButtonDrawable改变对的图片,提示你答对,2秒自动跳到下一个碎片里,首先通过viewpager里的getCurrentItem()的方法得到当前页面,再在当前页面加1,然后采用CountDownTimer实现2秒后自动跳到下一个碎片。当你答错选中正确答案,选中的RadioButton中setButtonDrawable改变错的图片,以及显示本题解析

当点击本题解释,改变图片,选中正确答案,显示本题解析,当再次点击又还原以前的图片

**当点击收藏,改变图片,获取当前碎片,得到当前碎片对象,通过修改语句修改某一列的值,比如收藏列没收藏前值为1,收藏后改变值为2,当再次点击还原以前的图修改数据库的值
当点击页码上面的图时,查看答题情况,答对的显示绿色,答错的显示红色,不答不改变,显示所有题号,是通过获得题目碎片的长度,将值通过Intent传到下一个activity中,通过for循环便利 GridView,在将 GridView加到布局中,在答题的判断中,通过map键值对的形式,比如在对的判断中map建是该题号,值为1,错的判断中map建同样是该题号,值为2,activity 中接受碎片的值,通过不同的值加在不同的list集合中,同样通过Intent传到下一个activity中,再在GridView的适配器中进行判断**

**我的错题和我的收藏同样是带条件的查询,条件后带的是你修改的那一列
模拟考试和答题有所不同,它就像我们考试一样,有时间规定,我题数要求,它的样子如下图所示:**

答题时radioGroup的OnCheckedChangeListener事件中进行判断,同样可以通过map来查看对错,自定义增加的方法,得到答过几题,还剩几题,当时间到,或者点击交卷时,就能得到答了几题,没答几题,以及答对了那些题答错了那些题

**本次项目总结:
本次项目我发现,写项目之前必须要有项目的大致轮廓,以及项目的构思,在实现功能前,必须先想清楚实现步骤以及思路。这样会避免少走很多弯路。
项目中遇到的问题:
使用webview加载静态网页时样式全变了,解决方案:
webview中有一个getSettings的方法,里面有很多属性 比如setJavaScriptEnabled(true); //允许加载JavaScript,setSupportZoom(true); //允许缩放setBuiltInZoomControls(true); //原网页基础上缩放setUseWideViewPort(true); //任意比例缩放等
在加载网页前,有个加载的动态效果,系统的UI可能满足不了,需要自定义UI
Intent不能直接把map集合的值带到下一个activity,解决方案将map数据添加到封装的myMap中,在将map放在Bundle中,然后用Intent传递。**

Android项目仿驾校宝典的答题APP相关推荐

  1. android 项目练习:自己的词典app——生词本(二)

    附上guthub连接:https://github.com/huburt-Hu/VocabularyBuilder 继续接昨天的内容,没看过的可以点击 android 项目练习:自己的词典app--生 ...

  2. Android项目2:新闻+视频聚合App——萌土日报

    前言:本人独立开发的新闻+视频聚合App.通过这个项目,我不仅掌握了Android移动开发常见的控件和布局的使用,还有通用的框架Okhttp.Glide.Jsoup.腾讯X5WebView,能快速开发 ...

  3. android 项目练习:自己的词典app——生词本(一)

    前言: 自学android差不多两个月了,由于本身对英语不感冒,而且记英语单词总是很快忘记,因此学习的过程也是蛮累的,好多类和方法都不知道啥意思,还要去查词典才知道. 还是延续我读书时的记忆方法--每 ...

  4. Android 项目必备(八)--> APP 的开发流程

    文章目录 一.正常的互联网开发 App 的流程 二.快速搭建项目 三.定开发规范 四.选用开发库 五.第三方服务集成 六.云测 一.正常的互联网开发 App 的流程 产品规划,定产品方向 需求调研,产 ...

  5. Android项目实践(四)——音乐播放器APP

    关于Android制作音乐播放器APP的几点建议 1.权限获得 1.在AndroidManifest.xml文件中,做如下声明: <uses-permission android:name=&q ...

  6. android项目uc浏览器,Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)

    之前网上看了下自定义消息栏,通知栏,了解到了Notification这个控件,发现UC浏览器等都是这种类型,今天写个demo实现下,如图: 其中每个按钮都有不同的功能,代码如下: package co ...

  7. Android项目之二手交易淘学院APP

    用户注册:通过输入学号密码进行注册: 用户登录:通过注册信息所使用的学号和密码进行登录,登陆成功后即可进入主页: 分类功能:用户可以点击主页中不同的类别模块进行不同类别商品的浏览: 评论功能:用户可以 ...

  8. android Android项目构建过程

    今天,简单讲讲android studio如何把写好的工程打包成apk的. 平时开发过程中我们通过android studio编写完成android项目之后直接点击 Run 'app'就可以在buil ...

  9. Android项目实战--手机卫士

    Android项目实战--手机卫士--结束 很久都没有来更新博客了,之前一直忙着工作的事,接触到了一些以前从来没有接触过的东西,真的挺有挑战性的,但也有很多的无奈,但也学习到了很多东西,我会慢慢的写到 ...

最新文章

  1. android11和ios,安卓与iOS细节对比:Reno Ace与iPhone 11 Pro Max,结果很意外
  2. eclipse常用设置之自动格式化
  3. Python3 replace()实现字符串替换
  4. java media player_MediaPlayerForJava(创建一个视频播放器)
  5. Synchronized和Lock的区别
  6. java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
  7. 【CodeForces - 1084D】The Fair Nut and the Best Path (树形dp)
  8. 生产电池要什么计算机技术,锂离子电池生产的几个关键工序讲解
  9. 微课|Python程序设计开发宝典(5.2.2):默认值参数
  10. 拓端tecdat|R语言生态学模拟对广义线性混合模型GLMM进行功率(功效、效能、效力)分析power analysis环境监测数据
  11. python urllib3离线安装_离线安装spyder的Python环境
  12. 通信协议之IIC总线
  13. “去中心化”和“分布式”的区别
  14. vue 使用 el-table 添加搜索框 实现简单搜索功能 ,同时判断输入是否为空
  15. Javascript判断是否是ipad的浏览器
  16. 360智能摄像头 android,360智能摄像机app
  17. iphone进入安全模式及退出安全模式的方法
  18. 51单片机——电脑通过串口控制LED
  19. OpenVZ 简单应用
  20. 专业分析远离社死!如何看待QQ出现大面积盗号?

热门文章

  1. LeetCode Top100特训
  2. 图片搜索太模糊?无损放大图片神器来了
  3. 2022护眼产品展,北京眼健康展,眼科医学展,近视矫正设备展
  4. 多管齐下显神威-2017逐浪CMS开启全新建站与WEB技术革命
  5. 进程间通信IPC-共享内存
  6. 子桓说:看人看本质,职场识人辨人之术
  7. linux纯命令行怎么下载,如何从Linux命令行轻松分享文件
  8. 驾驶证计算机管理系统,驾驶证信息系统
  9. U盘在我的电脑里不显示,只在系统托盘区里可以检测到设备
  10. Windows应用程序——记事本