Activity的三种启动方式以及不同Activity之间简单的数据传递

Activity的三种启动方式

Activity的启动方式分为以下三种:

  • 显示启动
  • 隐式启动
  • startActiviyForResult

下面是三种的基本用法

显示启动

一般用于启动当前工程内的普通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然后添加意图过滤器
<action>设置Activity的别名
<category>设置分类,这里是默认分类

	<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

startActivityForResult

带返回地启动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之间数据的传递分为两种
从主页向打开的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接口!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值