这个函数应该写在哪里呢?我们想一想这个函数何时会被调用:当我们在下面的编辑框里面输入一些内容之后,再点击按钮,程序就会执行这个函数。然后这个函数获取到编辑框的内容,再经过处理,把结果显示在上方的文本框里面。
很明显,这个函数和按钮有很大的关联。因为只有按钮被按下的时候,这个函数才会执行。
为了更好地理解接下来的知识,我给大家举个例子:假设有一个千金小姐,琴棋书画样样精通 ,老爷视她为掌上明珠。老爷为了是她有自保的能力,特地安排了一个贴身保镖。老爷分配给保镖的任务很简单,只要有陌生人接近了小姐,他就立马给陌生人拦住。有一天,一个社会青年看到了小姐的美貌,想要图谋不轨,于是悄悄地靠近了小姐。保镖立马就看到了这一幕啊,然后想起了自己的任务,拦住了社会青年。
接下来,我们来学习事件监听机制。首先,我们(老爷)有一个按钮(小姐)。为了使按钮具有某个功能(自保),就需要给它安排一个监听器(保镖)。我们给监听器添加事件处理的方式(任务:陌生人接近 —> 拦住他),然后把监听器绑定到按钮上(安排贴身保镖)。在我们的小游戏里面,这个事件当然就是按下按钮了。然后,按钮被按下的时候(社会青年接近小姐),监听器检测到这个动作,并调用之前添加的方式进行处理(想起任务,拦住社会青年)。
上面的过程概括一下就是:给监听器添加事件的处理方式;监听器绑定到按钮;事件发生;监听器处理事件。了解了这个之后,我们终于明白了:我们想要写的核心部分函数,其实就是监听器对按钮被点击这一事件的处理方式。为此,在写核心部分之前,我们首先给按钮绑定一个监听器。
在2.6.3中,我们已经获取到了控件的对象,包括按钮。所以,我们可以直接使用按钮对象的相关函数来给它添加监听器。具体地说,就是setOnClickListener函数。注意绑定监听器的代码应该写在onCreate函数里面。
setOnClickListener函数需要一个监听器对象作为参数。为此,我们需要创建一个监听器对象。(还记得new关键字的用法吗?点击复习)这里我们可以不用另外定义一个变量来临时“存储”监听器对象,如下:
由于监听器对象的创建需要指定事件的处理方式,所以我们加入花括号,里面写一个onClick方法:
到此为止,我们已经完成了监听器的创建和绑定。之后,只要按钮被点击,它对应的监听器的onClick方法就会立马被执行。
核心部分
当玩家点下按钮的时候,首先应该获取编辑框中的内容,并转换为字符串(使用任何对象都有的toString方法)。为此,我们可以使用编辑框对象的getText方法。具体代码如下:
综述篇里提到过,玩家的输入大概有四种情况:
开始游戏
什么都没输入
某个四位数字
其他内容
我们依次处理这几种情况。首先是开始游戏。当玩家输入“开始游戏”,并按下按钮之后,首先把上面的文本框和下面编辑框中的内容清除(事实上,无论输入什么,都应该把编辑框清空),然后调用产生随机数的函数,产生一个随机数,存储到某个变量中,最后在文本框里面添加文本,比如“新的一轮游戏已开始!你还有6次机会”。
仔细一想,我们还没有定义存储随机数和存储游戏剩余次数的变量呢!考虑到这些变量应该一直存在,我们把它也定义在onCreate函数外面。
最后一步,在文本框里面添加提示文本:
我们不妨运行,测试一下:
结果失败了。文本框里面并没有显示消息。这个问题的原因比较复杂,大概来讲就是if(text == “开始游戏”)这一句中,==的两边不是同一个对象,所以结果是false。我们这里其实是希望比较两个字符串对象的内容,所以应该使用equals方法,之后字符串的比较同样需要注意这一点。如下:
我们重新运行应用:
现在就好了。至此,我们完成了“开始游戏”的处理。下一个是什么也没有输入的处理。这是为了防止玩家不小心误点了按钮。为此,我们把它写在函数的前面。注意即使什么也没有输入,编辑框里面还是有一个空字符串。
接下来,我们处理数字的情况。为了简化思路 ,我们假设玩家输入的内容除了"开始游戏"之外就是一个四位数字。于是,我们直接把text变量和answer作为参数,调用getSimilarity方法。即可获取到玩家猜测的数字和答案直接的相似度了。
接着向文本框里面添加玩家猜测的数字和程序的提示文本,使用文本框对象的append方法。注意添加换行符(也就是回车),否则添加的文本全都在同一行。Android的换行符是**\n**
玩家的剩余次数也需要跟着自减1,并跟在提示信息后面:
我们紧接着写胜负判断:如果相似度是4A0B的话,那么说明玩家猜中了;如果次数变为0,那么可以判定游戏失败。这个比较简单,所以我直接放出代码:
事实上,我们的小游戏到此为止已经开发结束了,大体的流程已经全部实现。为了简化开发过程,我就不再做其他的优化了,大家可以根据自己的喜好添加别的功能。
尾声
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。
不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2017-2021字节跳动Android面试历年真题解析》
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!