Android开发权威指南(第二版)
上QQ阅读APP看书,第一时间看更新

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方法就是单击事件回调方法。