前言
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完整代码如下:
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的完整代码:
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完整代码:
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 }
完成以上几步之后,运行示例程序。运行效果:
输入Hello Activity,点击send得到:
示例代码:HelloActivity.rar(运行环境Android2.1)
本文简单的介绍了Activity,接下来需要认识Activity的生命周期。