代码改变世界

Android学习笔记(3):Hello Activity

2012-12-05 22:07  ps_zw  阅读(1841)  评论(2编辑  收藏  举报

前言

Android有四大组件:Activity,Service,Content Provider,Broadcast Receivers。我们从Activity开始逐个学习。

本文要点:

1.Activity是什么

2.如何创建Activity

3.Start another Activity

一、Activity是什么

Activity——它是一个可以同用户交互的应用程序组件。Android程序中的每个Activity都提供了一个单独的界面,它相当于Winform程序的Form。

An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface.

二、创建Activity

  像Form一样,Activity是一个基类,我们创建的具体的Activity都是继承自该类。创建Activity之前,我们先创建一个Android Project——HelloActivity,创建过程中,会创建一个程序默认启动的Activity,Name我们设置为MainActivity。

  在现有Project中创建Activity,可以按照:File -> New -> Other -> 选择Android/Android Activity -> 点击Next,设置Activity模板 -> 点击Next,设置Acitivity Name,Layout,Parent等信息 -> 点击Finish 完成Activity的创建。按此方式,我们在程序中创建一个名为DisplayMessageActivity,指定parent为MainActivity。

那么如何指定Android App 默认启动的Activity呢?这就得了解文件AndroidManifest.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.wzhang.helloactivity"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="6"
 9         android:targetSdkVersion="7" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.wzhang.helloactivity.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <activity
26             android:name="com.wzhang.helloactivity.DisplayMessageActivity"
27             android:label="@string/title_activity_display_message" >
28             <meta-data
29                 android:name="android.support.PARENT_ACTIVITY"
30                 android:value="com.wzhang.helloactivity.MainActivity" />
31         </activity>
32     </application>
33 
34 </manifest>

从上面的配置文件中,我们可以清楚的看到我们创建的两个Activity.当我们需要设置某个Acitivity为默认启动Activity时,该Activity的必须配置包含以下信息:

<intent-filter>
      <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

观察AndroidManifest.xml中第二个Activity,我们还能发现,Parent信息是在<meta-data />节点中指定的。

三、Start Another Activity

  一个Android 程序一般是由多个Activity组成,本节通过一个小列子介绍下如何完成不同的Activity的跳转和切换。

  在一个Activity中打开另一个Activity,会使用到Android的另一个组件:Intent。这里以从MainActivity跳转到DispalyMessageActivity为例:

1.修改Layout/main.xml文件,我们增加一个输入框和一个按钮,给按钮添加一个onclick事件sendMessage. main.xml完整代码如下:

View Code
 1 package com.wzhang.helloactivity;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.widget.EditText;
 9 
10 public class MainActivity extends Activity {
11 
12     public static final String EXTRA_MESSAGE = "com.wzhang.MainActivity.MESSAGE";
13 
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.main);
19     }
20 
21     @Override
22     public boolean onCreateOptionsMenu(Menu menu) {
23         // Inflate the menu; this adds items to the action bar if it is present.
24         getMenuInflater().inflate(R.menu.main, menu);
25         return true;
26     }
27     
28 
29     public void sendMessage(View view){
30         Intent intent = new Intent(this, DisplayMessageActivity.class);
31         EditText editText = (EditText) findViewById(R.id.txtMsg);
32         String message = editText.getText().toString();
33         intent.putExtra(EXTRA_MESSAGE, message);
34         startActivity(intent);
35     }
36 
37 }

2.在MainActivity.java中实现sendMessage,用来打开DisplayMessageActivity界面。具体如下:

a.创建Intent对象。

Intent intent = new Intent(this, DisplayMessageActivity.class);

第一个参数指定上下文环境,第二个参数指定目标对象。Activity是Context的子类,直接指定为DisplayMessageActivity。

注:到这里我们如果直接调用startActivity(intent):已经可以打开一个Activity了。但是很多情况下,我们打开一个Activity是需要传递信息的,所以我们继续。

b.调用intent.putExtra(name,value),将文本框中输入的信息,封装到Intent对象中;

EditText editText = (EditText) findViewById(R.id.txtMsg);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);

其中,变量EXTRA_MESSAGE,定义如下:

public static final String EXTRA_MESSAGE = "com.wzhang.helloactivity.MESSAGE";

putExtra参数说明:

Name,String类型。定义消息的Name,在被调用对象中需要通过这个Name来获取所需要的消息。

Value,String类型。需要传递的信息。

c.调用startActivity(intent),来打开DisplayMessageAcyivity.

MainActivity.java的完整代码:

View Code
 1 package com.wzhang.helloactivity;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.widget.EditText;
 9 
10 public class MainActivity extends Activity {
11 
12     public static final String EXTRA_MESSAGE = "com.wzhang.MainActivity.MESSAGE";
13 
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.main);
19     }
20 
21     @Override
22     public boolean onCreateOptionsMenu(Menu menu) {
23         // Inflate the menu; this adds items to the action bar if it is present.
24         getMenuInflater().inflate(R.menu.main, menu);
25         return true;
26     }
27     
28 
29     public void sendMessage(View view){
30         Intent intent = new Intent(this, DisplayMessageActivity.class);
31         EditText editText = (EditText) findViewById(R.id.txtMsg);
32         String message = editText.getText().toString();
33         intent.putExtra(EXTRA_MESSAGE, message);
34         startActivity(intent);
35     }
36 
37 }

3.在DisplayMessageActivity中获取Intent对象,并显示MainActivity传过来的Message;

Intent intent = getIntent();
String message = intent.getStringExtra(HelloActivity.EXTRA_MESSAGE);

DisplayMessageActivity完整代码:

View Code
 1 package com.wzhang.helloactivity;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.view.Menu;
 7 import android.view.MenuItem;
 8 import android.widget.TextView;
 9 
10 public class DisplayMessageActivity extends Activity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15 
16         Intent intent = getIntent();
17         String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
18         // Create the text view
19         TextView textView = new TextView(this);
20         textView.setTextSize(40);
21         textView.setText(message);
22         
23         setContentView(textView);        
24     }
25 
26     @Override
27     public boolean onCreateOptionsMenu(Menu menu) {
28         getMenuInflater().inflate(R.menu.display_message, menu);
29         return true;
30     }
31 
32     @Override
33     public boolean onOptionsItemSelected(MenuItem item) {
34         return super.onOptionsItemSelected(item);
35     }
36 
37 }

完成以上几步之后,运行示例程序。运行效果:

image

输入Hello Activity,点击send得到:

image

示例代码:HelloActivity.rar(运行环境Android2.1)

本文简单的介绍了Activity,接下来需要认识Activity的生命周期。