中山大学智慧健康服务平台基础的事件处理
一、实验题目
中山大学智慧健康服务平台应用开发
第五周任务 基础的事件处理
二、实现内容
实现一个Android应用,界面呈现如图中的效果。
要求
- 该界面为应用启动后看到的第一个界面。
- 各控件处理的要求
- 点击搜索按钮:
- 如果搜索内容为空,弹出Toast信息“搜索内容不能为空”。
- 如果搜索内容为“Health”,根据选中的RadioButton项弹出“搜索成功”对话框。
- 点击“确定”,弹出Toast信息——对话框“确定”按钮被点击。
点击“取消”,弹出Toast 信息——对话框“取消”按钮被点击。
否则弹出搜索失败对话框,对话框点击效果同上。
- RadioButton选择项切换:选择项切换之后,弹出Toast信息“XX被选中”,例如从图片切换到视频,弹出Toast信息“视频被选中”
- 点击搜索按钮:
三、课堂实验结果
(1)实验截图
- 搜索内容为空:
- 输入Health:
- 点击确定按钮:
- 点击取消按钮:
- 输入错误信息搜索失败:
- RadioButton选择项切换:
(2)实验步骤以及关键代码
按照题目的要求顺序来实现相关的代码。关键是给搜索按钮加一个监听函数,点击“搜索”就会执行函数。通过searchText.getText().toString()
得到输入框中的内容,根据输入的不同执行不同的语句。下面是输入为空时的代码:
if (TextUtils.isEmpty(searchText.getText().toString())) {
Toast.makeText(getApplication(), "搜索内容不能为空",
Toast.LENGTH_SHORT).show();
}
同理在输入为"Health"时提示"搜索成功",注意在前面加上radioButton.getText().toString()
得到选中按钮的内容。
弹出对话框后,对话框采用了链式调用,使用setTitle()和setMessage()等方法,这些函数的返回值都是当前对话框对象,代码如下:
alertDialog.setTitle("提示").setMessage(radioButton.getText().
toString()+"搜索成功").setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(),
"对话框“确定”按钮被点击",Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(),
"对话框“取消”按钮被点击",Toast.LENGTH_SHORT).show();
}
}).create();
当输入既不是空也不是Health时,弹出搜索失败,代码和上述类似。
最后一步是在切换button按钮时弹出Toast信息“XX被选中”。关键在于给radioGroup
加一个监听函数,那么在切换时执行函数即可。代码如下:
String id = "";
RadioButton radio1 = findViewById(R.id.radio_button1);
if (radio1.getId() == checkedId) id = radio1.getText().toString();
RadioButton radio2 = findViewById(R.id.radio_button2);
if (radio2.getId() == checkedId) id = radio2.getText().toString();
RadioButton radio3 = findViewById(R.id.radio_button3);
if (radio3.getId() == checkedId) id = radio3.getText().toString();
RadioButton radio4 = findViewById(R.id.radio_button4);
if (radio4.getId() == checkedId) id = radio4.getText().toString();
Toast.makeText(getApplication(), id + "被选中", Toast.LENGTH_SHORT).show();
代码显得比较冗余,但我暂时没有想到其他办法去来完成这一部分。
(3)实验遇到的困难以及解决思路
这次实验遇到的问题都比较小,很快都可以解决。比如开始写对话框时一直不显示,最后发现是漏掉了alertDialog.show();
。还有就是这一句RadioButton radioButton = findViewById(radioGroup. getCheckedRadioButtonId());
开始我把这一句写在了监听函数的外面,导致在点了搜索按钮后对话框中不是选中项,后来把这一句拖到函数里面就行了。
然后就是切换button按钮时弹出Toast信息想了比较久,开始我准备直接看checkedId
的值,但发现这个值是一个很大的整数,使用起来并不方便,最后用了getId()
函数成功实现了这一部分。
四、实验思考及感想
这次的实验添加了很多逻辑的判断,所以较第一次实验UI布局难度增大了很多,所以要花跟更多的时间去查找相关的资料,否则都不会写逻辑判断语句。虽然老师给的PPT中已经包括了大部分的内容,但是自己写起来还是会遇到很多的问题,例如我开始把setOnClickListener
写在了onCreate
函数的外面,一直报错button没有这个函数,当时就懵了,后来把整个监听事件写在onCreate
里面才解决。这个bug让我明白不能单纯照搬函数,而要理解函数之间的关系和作用。只要掌握了某个关键的语句用法,其他的都可以举一反三,最后成功完成了这次实验。
虽然是实验完成了,但是还有很多函数和关键字的用法我还不是非常熟悉,所以还是应该花多一点时间去熟悉和了解函数语句的用法,这样才可以在以后的实验节省时间,提高效率。