1.什么是Activity
Activity是Android四大组件之一,程序显示的界面
2.如何创建Activity
需要定义一个类继承Activity
在清单文件AndroidManifest.xml的<application>节点中声明<activity>
3.启动Activity
使用显式意图
创建Intent对象,设置指定的类,调用startActivity(intent)方法来启动新的Activity
new Intent(this, NewActivity.class);
该方法一般用于同一个应用程序内部的Activity跳转
使用隐式意图
创建Intent对象,设置动作、数据、类型等信息,再使用startActivity(intent)方法来启动新的Activity
intent.setClassName(this, "cn.itcast.activity.NewActivity");
该方式灵活、可扩展性强
或者:
intent.setClassName("cn.itcast.downloader", "cn.itcast.downloader.MainActivity");
该方式可以启动其他应用程序中的Activity
4.关闭Activity
执行finish()方法
5.启动Activity时传递数据
使用启动Activity的意图对象Intent.putExtra()方法可以携带一些数据到新的Activity中,在新的Activity中可以调用getIntent()方法得到Intent对象,再通过该Intent调用getStringExtra()、getIntExtra()等方法即可得到传递过来的数据。
Intent中可以携带8种基本数据类型:基本数据类型的数组、Bundle、CharSequence、Serializable、Parcelable
6.关闭Activity时返回数据
如果启动Activity时,需要目标Activity返回数据,那么就要使用startActivityForResult(Intent intent, int requestCode)方法来打开Activity,并重写onActivityResult(int requestCode, int resultCode, Intent data) 方法,该方法在目标Activity结束时自动执行,该方法的参数即是目标Activity传回的结果数据。
而在目标Activity中需要调用setResult(int resultCode, Intent data)方法用于设置返回数据,当前目标Activity关闭时就会调用来源Activity的onActivityResult(int requestCode, int resultCode, Intent data) 方法。
7.使用隐式意图创建Activity
显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件
需要在清单文件中定义<activity>时,同时定义<intent-filter>才能被隐式意图启动。
<intent-filter>中至少要配置一个<action>和一个<category>,否则Activity无法被隐式意图启动。
Intent对象中设置的action、category、data,在<intent-filter>中必须全部包含时才能启动Activity。
<intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不需要全部匹配,每个标签各匹配一个即可启动Activity。
如果一个Intent可以匹配多个Activity,Android系统会提示用户进行选择。
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void explicit(View view) {
Intent intent = new Intent(this, OtherActivity.class);
// intent.setClass(this, OtherActivity.class);
// intent.setClassName(this, "com.xxx.activity.OtherActivity");
// intent.setClassName("com.xxx.activity", "com.xxx.activity.OtherActivity");
startActivity(intent);
}
public void implicit(View view) {
Intent intent = new Intent();
/*
// 拨打电话
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel://18600012345"));
*/
/*
// 打开浏览器
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse("http://192.168.1.253:8080/15.Web"));
*/
/*
// 播放音频
intent.setAction("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/Adele - Rolling in the Deep.mp3"), "audio/*");
*/
/*
// 播放视频
intent.setAction("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp4"), "video/*");
*/
/*
// 显示图片
intent.setAction("android.intent.action.VIEW");
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/9.jpg"), "image/*");
*/
/*
intent.setAction("com.xxx.action.OTHER_ACTIVITY");
*/
startActivity(intent);
}
public void send(View view) {
Intent intent = new Intent(this, OtherActivity.class); // 用来启动Activity, 发送广播, 启动服务
/*
intent.putExtra("name", "张三"); // 用Intent传递数据
intent.putExtra("age", 18);
*/
/*
Bundle bundle1 = new Bundle();
bundle1.putString("name", "张三");
bundle1.putInt("age", 18);
Bundle bundle2 = new Bundle();
bundle2.putString("name", "李四");
bundle2.putInt("age", 19);
intent.putExtra("bundle1", bundle1);
intent.putExtra("bundle2", bundle2);
*/
Person p1 = new Person("王五", 20);
Person p2 = new Person("赵六", 21);
intent.putExtra("p1", p1);
intent.putExtra("p2", p2);
startActivity(intent);
}
public void result(View view) {
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("name", "张三");
intent.putExtra("age", 18);
startActivityForResult(intent, 100); // 启动一个Activity, 等待返回结果
}
// 当前Activity启动的新Activity关闭时, 就会自动执行这个方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
TextView mainTV = (TextView) findViewById(R.id.mainTV);
mainTV.setText(data.getStringExtra("name") + ": " + data.getIntExtra("age", -1));
}
}
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
TextView otherTV = (TextView) findViewById(R.id.otherTV);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", -1);
otherTV.setText(name + ": " + age);
/*
Bundle bundle1 = intent.getBundleExtra("bundle1");
Bundle bundle2 = intent.getBundleExtra("bundle2");
String name1 = bundle1.getString("name");
int age1 = bundle1.getInt("age");
String name2 = bundle2.getString("name");
int age2 = bundle2.getInt("age");
otherTV.setText(name1 + ": " + age1 + "; " + name2 + ": " + age2);
*/
/*
Person p1 = (Person) intent.getSerializableExtra("p1");
Person p2 = (Person) intent.getSerializableExtra("p2");
otherTV.setText(p1.getName() + ": " + p1.getAge() + "; " + p2.getName() + ": " + p2.getAge());
*/
Intent data = new Intent();
data.putExtra("name", "王五");
data.putExtra("age", 21);
setResult(200, data); // 设置了结果数据
}
public void close(View view) {
finish(); // 关闭当前Activity
}
}
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}