3.5 编写窗口类
本节开始编写Android应用程序的Java代码部分。本例的Java代码部分很简单,只包含了初始化、显示日期和时间部分,这两部分都在窗口类中实现(DatetimeActivity)。其中初始化部分通常在Activity.onCreate方法中完成,在该方法中主要装载View和控件。而显示日期和时间部分在按钮的单击事件方法中完成。
一个标准的Android应用程序窗口类需要从android.app.Activity类继承,至少要实现onCreate方法来初始化这个窗口了。本例的窗口类的代码如下:
源代码文件:src/ch03/ShowDatetime/src/mobile/android/show/datetime/DatetimeActivity.java
package mobile.android.show.datetime;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class DatetimeActivity extends Activity implements OnClickListener
{
// 通用的显示对话框的方法
private void showDialog(String title, String msg)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框的图标
builder.setIcon(android.R.drawable.ic_dialog_info);
// 设置对话框的标题
builder.setTitle(title);
// 设置对话框显示的信息
builder.setMessage(msg);
// 设置对话框的按钮
builder.setPositiveButton("确定", null);
// 显示对话框
builder.create().show();
Intent intent;
}
// 两个按钮共用一个单击事件方法,通过按钮的id区分单击了哪个按钮
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnShowDate:
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 显示当前日期
showDialog("当前日期", sdf.format(new Date()));
break;
}
case R.id.btnShowTime:
{
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
// 显示当前时间
showDialog("当前时间", sdf.format(new Date()));
break;
}
}
}
// 初始化窗口
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 装载了View(上一节编写的布局文件)
setContentView(R.layout.activity_datetime);
// 获得两个按钮的对象实例
Button btnShowDate = (Button) findViewById(R.id.btnShowDate);
Button btnShowTime = (Button) findViewById(R.id.btnShowTime);
// 为两个按钮添加单击事件监听器(实现了OnClickListener接口的对象)
btnShowDate.setOnClickListener(this);
btnShowTime.setOnClickListener(this);
}
}
编写DatetimeActivity类时应了解如下几点。
AlertDialog可用于显示对话框。
如果多个控件共用一个事件方法,必须在布局文件中指定控件标签的android:id属性,而且这些控件的android:id属性值不能相同。
res目录中的每一个资源文件都会在gen目录的R类中生成一个int类型的变量,用于标识当前资源文件。所以在onCreate方法中可以通过R.layout.activity_datetime引用activity_datetime.xml文件。这说明已经在R类的layout子类中生成一个名为activity_datetime的静态int类型的变量,layout类的代码如下:
源代码文件:src/ch03/ShowDatetime/gen/mobile/android/show/datetime/R.java
public final class R {
……
public static final class layout {
public static final int activity_datetime=0x7f030000;
}
……
}
如果使用单击事件,必须实现OnClickListener接口,该接口中的onClick方法就是单击事件回调方法。