Activity的启动方式分为以下三种:
下面是三种的基本用法
一般用于启动当前工程内的普通Activity,如:
从当前MainActivity跳转至MainActivity2
//创建意图
//参数1:环境上下文,当前环境(this)
//参数2:需要跳转的类的对象
Intent it = new Intent(this,MainActivity2.class);
startActivity(it);//启动Activity
一般用于启动系统自带的Activity(浏览器、图库等),如:
这里通过浏览器打开指定网址,如果要拨打电话则修改为:tel:xxxxxxxxxx
//创建意图
//参数1:action,是Activity的别名
//参数2:Uri对象,打开的路径,通过协议来具体打开什么Activity,
Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
startActivity(it);//启动Activity
如果需要隐式启动普通的Activity需要在AndroidMainfest.xml文件内找到要隐式启动的Activity然后添加意图过滤器
设置Activity的别名
设置分类,这里是默认分类
<intent-filter>
<action android:name = "ActivityName"/>
<category android:name = "android.intent.category.DEFAULT"/>
</intent-filter>
回到java文件
//创建意图
//参数1:指定Activity的别名
Intent it = new Intent("ActivityName"));
startActivity(it);//启动Activity
完成这两部就能隐式启动普通的Activity
带返回地启动Activity,如某些应用中的打开图库选择图片、打开照相机拍摄照片等需要有返回值返回原来Activity的情况
//创建意图
//参数1:环境上下文,当前环境(this)
//参数2:需要跳转的类的对象
Intent it = new Intent(this,MainActivity2.class);
//参数:请求码
startActivityForResult(it, 1000);
如果通过startActivityForResult
的方式启动第二个Activity,当第二个Activity处理结束后,再会到当前Activity时,会自动回调onActivityResult
方法
在onActivityResult
中我们可以处理第二个Activity返回的结果,如:拍照后得到的照片,从图库中选取的照片
//参数1:请求码,区分启动的Activity,如启动图库或者启动照相机等
//参数2:结果码
//resultCode:
// 取消:RESULT_CANCEL -1
// 正确处理后返回:RESULT_OK 0
//参数3:意图对象,用于数据传递,可以为null
// 可以通过启动的Activity的意图对象调用putExtra()并调用setResult()方法来传递
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//resultCode结果码可以通过第二个Activity调用setResult()方法设置
if(resultCode == RESULT_OK) {
//区分结果来自于哪个Activity
if(requestCode == 1000) {
log.e("TAG", "自动进入了onActivityResult,requestCode=" + requestCode + ",resultCode=" + resultCode);
log.e("TAG", "返回的数据是:" + data.getStringExtra("myMsg"));
}
}
}
MainActivity2
Intent it =new Intent();
it.putExtra("myMsg", "这是来自第二个界面的信息");
//设置结果
//参数1:结果码,在上一个界面的onActivityResult方法中通过resultCode获取
//参数2:意图对象,主要作用:放数据,再上一个界面的onActivityResult方法中通过data获取
setResult(RESULT_OK, it);
finish();
Activity之间数据的传递分为两种
从主页向打开的Activity传递
这里用显示启动的代码来演示
//创建意图
//参数1:环境上下文,当前环境(this)
//参数2:需要跳转的类的对象
Intent it = new Intent(this,MainActivity2.class);
//要传递的内容
it.putExtra("msg1", "这是数据1");
it.putExtra("msg2", 100);
startActivity(it);//启动Activity
MainActivity2
//如果要获取上一个界面传来的数据,首先要获取用作启动的意图
Intent it = getIntent();
//it.get对应类型Extra()
String msg1 = it.getStringExtra("msg1");
//参数1:数据的name
//参数2:类型默认值
int msg2 = it.getIntExtra("msg2", 0);
//已经成功获取两个数据,可以对其进行操作...
假设创建了一个Student类,其属性为:name
,age
,sex
,这个类需要实现Serializable接口(序列化对象)
这里依旧是使用显示启动的代码来演示
//创建意图
//参数1:环境上下文,当前环境(this)
//参数2:需要跳转的类的对象
Intent it = new Intent(this,MainActivity2.class);
//要传递的对象
Student s = new Student("张三", 22, "男");
it.putExtra("stu", s);
startActivity(it);//启动Activity
MainActivity2
//如果要获取上一个界面传来的数据,首先要获取用作启动的意图
Intent it = getIntent();
//获取序列化对象
Student stu = (Student)it.getSerializableExtra("stu");
//已经成功获取序列化对象,可以对其进行操作...
传递的类必须要实现Serializable接口!!