这个是我的第一篇博客!
一转眼大学已经过去了一半,在学校一直感觉到很迷茫,
在学校一直没有找到自己想要的东西,但是在我的内心中总是在告诉自己--你要学一点有用的技能(或许有用吧)
或许是因为自己有一定的java基础,也或许是因为早些时候喜欢折腾安卓刷机的乐趣,所以我选择了学习安卓。由于学校没有开设安卓课程,都是一些大数据类的课程,但是我不是很有兴趣,所以我开始了自学安卓之路。
之所以写博客是想要记录下我的学习历程--我的安卓学习之路
我不确定我能走到多远,只是想尽可能的走远一点吧。
在找了很多的资料,包括书籍,以及网上的学习视频,总是和自己感觉的略有不同,网上的评价也各有千秋,我深知,适合自己的才是最好的。
在找寻资料的期间,零零碎碎的我也学习了很多杂碎的东西,后面我才明白,我没有经过系统的学习。在我以前的经验来看,无论怎样,基础知识都将是重要的。
所以我决定我要从基础开始系统的学习一遍。
在我做这个决定后,我开始准备我要学习的资料,后面我选中了 《Android编程权威指南 第3版》这一本书,选择它的原因也很简单,这本书是基于Android Studio编写,并且以详尽的案例的讲解知识点。
前面说了那么多没用的乱七八糟的东西,下面还是回到主题。
GeoQuiz 在这个项目中所涉及的知识确实很少,我就详细说一下其中挑战练习吧!
作为一个安卓初学的菜鸟来说,如果有什么说错或者不是很好的的地方,请谅解,如果有大佬不吝指点1,2我将非常感谢。
下面来看看这些问题
对于第一个问题,用户作弊后,可以旋转CheatActivity来清除作弊痕迹,我就直接使用在CheatActivity.java中使用
protected void onSaveInstanceState(Bundle outState)
对于第二个问题 ,和第一个问题类似,解决方法一致。
当我看到第三个问题的时候,我确实思考了一些时间怎么来解决这个问题,
我尝试了再Question.java中再添加一个Boolean 类型的变量,用于记录这个问题已经被用户作弊,用户在判断的时候只需要查询这个Boolean的值,就可以判断这个问题用户是否曾经作弊。但是这个是在Activity不会销毁和重建才有效。就像旋转一次屏幕,就会使QuestionBank重建,这样这些用于判断是否作弊的Boolean值全部重置。所以这个方案被我否定了。
在我的思考下,我找到了解决的办法
我使用了一个List来解决这个问题
private ArrayList mIsCheaterQuestion= new ArrayList();
protected void onActivityResult(intrequestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK){
return;
}
if (requestCode == REQUEST_CODE_CHEAT){
if (data == null){
return;
}
mIsCheater = CheatActivity.wasAnswerShow(data);
mIsCheaterQuestion.add(mCurrentIndex);
}
}
只需要将用户作弊过的问题的索引号保存起来,然后判断这个问题的索引号是否在这个List中,就可以判断这个问题是否曾经做过弊。
为了防止Activity的销毁和重建(旋转屏幕)只需要像开始两个问题那样使用
protected void onSaveInstanceState(BundleoutState)
这个方法将这个list 保存,然后复原就可以了。
对于这个问题,想起来还是很简单的,无非就是定义一个变量,然后作弊后更新这个变量,当等于0时,就不让作弊了,做一个Toast。
但是我遇到了一个问题
我在资源文件中定义了
3 integer >
我在Activity中使用
mCheaterNum = R.integer.start_cheater_num;
后面是改为了
3
Activity中使用
mCheaterNum =Integer.parseInt(this.getString(R.string.start_cheater_num));
解决了这个问题。当然 要完整的完成它 还要做防止Activity的销毁和重建,还要做数据的一些保留的工作了,就和前面一样。
做完这些,我还给它加了一个计分的功能 ,答对了,我就加一分嘛!!
关于项目的所有源码,我也上传到论坛http://download.csdn.net/download/qq_32503365/10110590
点击打开链接
最后给大家看看最终的界面图: