随笔分类 -  Android编程权威指南(第3版)挑战练习

摘要:相较于发送消息,愤怒的用户可能更倾向于直接责问陋习嫌疑人。新增一个按钮,允许用户直接拨打陋习嫌疑人的电话。 要完成这个挑战,首先需要联系人数据库中的手机号码。这需要查询ContactsContract数据库中的CommonDataKinds.Phone表。如何查询,请查看它们的参考文档。 小提示:你 阅读全文
posted @ 2018-12-12 21:52 杜王町上班族 阅读(927) 评论(0) 推荐(1)
摘要:这个练习比较简单。Android支持库有个叫作ShareCompat的类,它有一个内部类叫IntentBuilder。使用这个内部类创建发送消息的Intent略微方便一些。因此,请在mReportButton的监听器中,改用ShareCompat.IntentBuilder来创建你的Intent。 阅读全文
posted @ 2018-12-12 00:51 杜王町上班族 阅读(607) 评论(0) 推荐(0)
摘要:如果为应用添加过Delete Crime菜单项的话,就可以直接调用CrimeLab的deleteCrime(Crime)方法,继而调用mDatabase.delete(...)方法来实现删除功能。如果还没有,那就先给CrimeFragment的工具栏添加一个Delete Crime菜单项,然后调用C 阅读全文
posted @ 2018-11-29 17:45 杜王町上班族 阅读(731) 评论(0) 推荐(0)
摘要:当前,CriminalIntent应用启动后,会显示一个空白列表。从用户体验上来讲,即使crime列表是空的,也应展示提示或解释类信息。请设置空视图并展示类似“没有crime记录可以显示”的信息。再添加一个按钮,方便用户直接创建新的crime记录。判断crime列表是否包含数据,然后使用任何类都有的 阅读全文
posted @ 2018-11-27 17:38 杜王町上班族 阅读(1201) 评论(0) 推荐(0)
摘要:按照书里步骤来就行 1.首先,在strings.xml文件中定义复数字符串资源。 2.然后,在updateSutitle方法里面修改,使用getQuantityString方法正确处理单复数问题 3.运行效果: 阅读全文
posted @ 2018-11-27 16:36 杜王町上班族 阅读(522) 评论(0) 推荐(0)
摘要:CriminalIntent应用目前不支持删除现有crime记录。请为CrimeFragment添加菜单项,允许用户删除当前crime记录。用户点击删除菜单项后,记得调用CrimeFragment托管活动的finish()方法回退到前一个activity界面。 步骤跟书里添加的那段差不多: 1.创建 阅读全文
posted @ 2018-11-27 16:10 杜王町上班族 阅读(1538) 评论(0) 推荐(0)
摘要:首先看一个简单的练习。另写一个名为TimePickerFragment的对话框fragment,允许用户使用TimePicker组件选择crime发生的具体时间。在CrimeFragment用户界面上再添加一个按钮,以显示TimePickerFragment视图界面。 跟书里DatePicker的步 阅读全文
posted @ 2018-11-25 20:56 杜王町上班族 阅读(697) 评论(0) 推荐(0)
摘要:给CrimePagerActivity添加两个按钮。允许使用它们快速跳至第一条和最后一条crime记录。当然,要注意控制,查看第一条记录时应禁用Jump to First按钮,查看最后一条时禁用Jump to Last按钮。 1.首先修改activity_crime_pager.xml,添加两个按钮 阅读全文
posted @ 2018-11-20 22:40 杜王町上班族 阅读(800) 评论(0) 推荐(0)
摘要:可以观察到,原本CrimeFragment的边距没有了。 要修改很简单,只需要在fragment_crime.xml里面修改一下就可以。 把 1 android:layout_margin="16dp" 修改成 1 android:padding="16dp" 效果: 阅读全文
posted @ 2018-11-20 21:27 杜王町上班族 阅读(436) 评论(0) 推荐(0)
摘要:把原本使用的Adapter的notifyDataSetChanged方法换成定位刷新RecyclerView.Adapter的notifyItem。 1.在CrimeListFragment里面定义一个全局变量 1 private static int mCrimeIndex; 2.修改CrimeL 阅读全文
posted @ 2018-11-07 17:34 杜王町上班族 阅读(843) 评论(0) 推荐(0)
摘要:把原本的Date对象的toString()方法换成android.text.format.DateFormat类实例。 1.导入import android.text.format.DateFormat; 1 import android.text.format.DateFormat; 2.在Cri 阅读全文
posted @ 2018-11-05 12:53 杜王町上班族 阅读(578) 评论(0) 推荐(0)
摘要:请在RecyclerView中创建两类列表项:一般性crime,以及需警方介入的crime。要完成这个挑战,你需要用到RecyclerView.Adapter的视图类别功能(view type)。在Crime对象里,再添加一个mRequiresPolice实例变量,使用它并借助getItemView 阅读全文
posted @ 2018-11-03 20:42 杜王町上班族 阅读(1703) 评论(0) 推荐(1)
摘要:允许用户最多作弊3次。记录用户查看答案的次数,在CHEAT按钮下显示剩余次数。超出后,禁用偷看按钮。 因为只有点击mShowAnswerButton按钮才是作弊,所以需要从QuizActivity传数据到CheatActivity再传回去。 1.首先定义好新的控件显示剩余作弊次数 2.然后再在Qui 阅读全文
posted @ 2018-11-01 16:38 杜王町上班族 阅读(605) 评论(0) 推荐(0)
摘要:在GeoQuiz应用的页面布局上添加一个TextView组件,向用户报告设备运行系统的API级别。 首先在activity_cheat.xml里面定义好组件 在CheatActivity里面定义好 在onCreate方法里面定义好 最后把版本号赋值给组件对象就行 运行效果: 阅读全文
posted @ 2018-10-31 23:03 杜王町上班族 阅读(476) 评论(0) 推荐(0)
摘要:作弊者是注定会失败的。当然,如果他们能一直避开反作弊手段,那就另当别论了。正所谓道高一尺魔高一丈,也许他们能做到。 1.GeoQuiz应用有些大漏洞,可以旋转CheatActivity来清除作弊痕迹。 解决方法,把数据保存在Bundle对象里面。 首先先定义好Key值 然后在onSaveInstan 阅读全文
posted @ 2018-10-30 20:10 杜王町上班族 阅读(986) 评论(0) 推荐(0)
摘要:用户答完全部题目后,显示一个toast消息,给出百分比形式的评分。 1.设置两个数据,一个代表答对正确答案的个数,一个代表回答问题的个数。 2.在checkAnswer函数里面,当答对题目的时候,把correctAnswer加一。 3.在mNextButton按钮监听器里面每点击一次answerLe 阅读全文
posted @ 2018-10-28 17:31 杜王町上班族 阅读(914) 评论(0) 推荐(0)
摘要:用户答完某道题:就禁掉那道题对应的按钮,防止用户一题多答。 1.在Question类里面添加属性isAnswerd,并且增加相应的getter跟setter方法,构造函数修改。 2.修改mQuestionBank数组里面的创建对象时构造函数的参数,第三个参数默认为0表示没答过 3.设置Key值 4. 阅读全文
posted @ 2018-10-28 17:24 杜王町上班族 阅读(2129) 评论(1) 推荐(2)
摘要:把前进和后退按钮变成只显示指示图标,让用户界面更清爽。 1.把UI界面的Button控件换成ImageButton 2.初始化ImageButton控件对象 3.修改Button为ImageButton创建监听器 4.最后效果 阅读全文
posted @ 2018-10-28 13:43 杜王町上班族 阅读(561) 评论(0) 推荐(0)
摘要:为应用新增后退按钮,用户点击时,可以显示上一道测试题目。 1.首先在资源文件string.xml里面添加后退按钮的引用名称 2.然后再UI界面添加按钮控件信息 3.初始化控件对象 4.在onCreate里面添加mPrevButton监听器以及后退的判定条件 阅读全文
posted @ 2018-10-28 13:31 杜王町上班族 阅读(680) 评论(0) 推荐(0)
摘要:为了优化体验,点击到题目(TextView)区域也可以跳转到下一题。 1.先初始化控件对象 2.在onCreate函数里面为mQuestionTextView添加监听器 阅读全文
posted @ 2018-10-28 13:10 杜王町上班族 阅读(1511) 评论(0) 推荐(0)