手机开发--中山大学智慧健康服务健康平台基础的事件处理
一、实验题目
中山大学智慧健康服务平台应用开发,基础的事件处理
二、实现内容
- 该界面为应用启动后看到的第一个界面。
- 各控件处理的要求
- 点击搜索按钮:
- 如果搜索内容为空,弹出Toast信息“搜索内容不能为空”。
- 如果搜索内容为“Health”,根据选中的
RadioButton
项弹出如下对话框。 - 点击“确定”,弹出Toast信息——对话框“确定”按钮被点击。
- 点击“取消”,弹出Toast 信息——对话框“取消”按钮被点击。
- 否则弹出如下对话框,对话框点击效果同上。
-
RadioButton
选择项切换:选择项切换之后,弹出Toast信息“XX被选中”,例如从图片切换到视频,弹出Toast信息“视频被选中”
三、课堂实验结果
(1)实验截图
(2)实验步骤以及关键代码
只处理MainActivity.java
文件
package com.example.a28798.firstproject;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//static RadioGroup radioGroup;
private int chooseId = R.id.radioButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioClick();
buttonClick();
}
private void buttonClick(){
final AlertDialog.Builder alertDialogSuccess1=new AlertDialog.Builder(this);
alertDialogSuccess1.setTitle("提示").setMessage("图片搜索成功").setPositiveButton("确认",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i) {
Toast.makeText(getApplication(), "对话框“确定”按钮被点击", Toast.LENGTH_SHORT).show();
}}).setNegativeButton("取消",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
Toast.makeText(getApplication(), "对话框“取消”按钮被点击", Toast.LENGTH_SHORT).show();
}}).create();
final AlertDialog.Builder alertDialogSuccess2=new AlertDialog.Builder(this);
alertDialogSuccess2.setTitle("提示").setMessage("视频搜索成功").setPositiveButton("确认",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i) {
Toast.makeText(getApplication(), "对话框“确定”按钮被点击", Toast.LENGTH_SHORT).show();
}}).setNegativeButton("取消",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
Toast.makeText(getApplication(), "对话框“取消”按钮被点击", Toast.LENGTH_SHORT).show();
}}).create();
final AlertDialog.Builder alertDialogSuccess3=new AlertDialog.Builder(this);
alertDialogSuccess3.setTitle("提示").setMessage("问答搜索成功").setPositiveButton("确认",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i) {
Toast.makeText(getApplication(), "对话框“确定”按钮被点击", Toast.LENGTH_SHORT).show();
}}).setNegativeButton("取消",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
Toast.makeText(getApplication(), "对话框“取消”按钮被点击", Toast.LENGTH_SHORT).show();
}}).create();
final AlertDialog.Builder alertDialogSuccess4=new AlertDialog.Builder(this);
alertDialogSuccess4.setTitle("提示").setMessage("资讯搜索成功").setPositiveButton("确认",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i) {
Toast.makeText(getApplication(), "对话框“确定”按钮被点击", Toast.LENGTH_SHORT).show();
}}).setNegativeButton("取消",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
Toast.makeText(getApplication(), "对话框“取消”按钮被点击", Toast.LENGTH_SHORT).show();
}}).create();
final AlertDialog.Builder alertDialogFail=new AlertDialog.Builder(this);
alertDialogFail.setTitle("提示").setMessage("搜索失败").setPositiveButton("确认",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i) {
Toast.makeText(getApplication(), "对话框“确定”按钮被点击", Toast.LENGTH_SHORT).show();
}}).setNegativeButton("取消",
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
Toast.makeText(getApplication(), "对话框“取消”按钮被点击", Toast.LENGTH_SHORT).show();
}}).create();
Button button = (Button)findViewById(R.id.button2);
final EditText editText = (EditText)findViewById(R.id.editText);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(editText.getText().length() == 0){
Toast.makeText(getApplication(), "搜索内容不能为空",Toast.LENGTH_SHORT).show();
}
else if(editText.getEditableText().toString().equals("Health")){
if(chooseId==R.id.radioButton){
alertDialogSuccess1.show();
}
else if(chooseId == R.id.radioButton2){
alertDialogSuccess2.show();
}
else if(chooseId == R.id.radioButton3){
alertDialogSuccess3.show();
}
else{
alertDialogSuccess4.show();
}
}
else {
alertDialogFail.show();
}
}
});
}
private void radioClick(){
RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
//radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
chooseId = checkedId;
if(checkedId == R.id.radioButton){
Toast.makeText(getApplication(), "图片被选中",Toast.LENGTH_SHORT).show();
}
else if (checkedId == R.id.radioButton2){
Toast.makeText(getApplication(), "视频被选中",Toast.LENGTH_SHORT).show();
}
else if(checkedId == R.id.radioButton3){
Toast.makeText(getApplication(), "问答被选中",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplication(), "资讯被选中",Toast.LENGTH_SHORT).show();
}
}
});
}
}
(3)实验遇到的困难以及解决思路
- 第一个遇到的问题是在
activity_main.xml
中用OnClick='XXX'
然后在MainActivity.java
中实现相对应的函数,然后App疯狂闪退,可能是因为Theme的问题,但是果然放弃了这种方案,直接在MainActivity.java
中绑定了。 - 第二个遇到的问题是直接在
MainActivity.java
写上button.setOnClickListener(new View.OnClickListener() {})
函数,这样写会提示setOnClickListener
无法识别,需要把这个函数写在另一个函数里面,然后用protected void onCreate(Bundle savedInstanceState) {}
调用。 - 第三个问题就比较严重了,至今没有更好的解决方案。就是对话框的问题,因为对话框是
final
,所以不能修改,一开始是在alertDialogFail.setTitle(XX).setMessage(XXXX)
中的setTitle
中做文章,因为要通过识别radioGroup
中选中的信息来显示相对应的信息,所以先通过了radioGroup
的id取得了radioGroup
,然后通过radioGroup.getCheckedRadioButtonId()
获得被点击的radioButton
,然后再用radioButton.getText()
获取字符串,但是结果显示都是第一个选中,因为默认状态是选中第一个,而且对话框预制好了之后没法更改,所以就直接把四个radioButton
对应的对话框都预制了一下,解决了问题。
四、实验思考及感想
- 没有学过Java语言,还有很多性质不知道,遇到了问题不知道是安卓开发的问题,还是java的问题,会耗费很长时间,不过解决了就印象深刻了。
- 会出现一些意料之外的问题,比如为什么选中其他的
radioButton
还是显示第一个,这种问题,应该还是很难查得到的,网上一般都是radioButton
的用法之类的,这时候还需要自己的思考,比如为什么选中其他的没有反应,可以通过看日志得知错误信息,还要理解函数什么时候被调用,并且知道每个阶段的预期情况,总体来说还是可以解决的。