使用Intent跳转活动

一、使用Intent启动活动

Intent大致可以分为两种:显式Intent和隐式Intent

1. 显式Intent
button.setOnclickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
		startActivity(intent);
	}
});
2. 隐式Intent

打开AndroidManifest文件,在activity标签下配置intent-filter标签的内容,指定当前活动能响应的action和category

<activity android:name=".secondActivity">
	<intent-filter>
		<action android:name="com.example.activitytest.ACTION_START"/>
		<category android:name="com.example.activitytest.MY_CATEGORY"/>
	</intent-filter>
</activity>

只有action和category中的内容同时匹配上Intent中指定的action和category时,这个活动才能响应Intent

button.setOnclickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v) {
		Intent intent = new Intent("com.example.activitytest.ACTION_START");
		intent.addCategory("com.example.activitytest.MY_CATEGORY");
		startActivity(intent);
	}
});

二、使用Intent传递数据

1. 向下一个活动传递数据
button.setOnclickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v) {
		String data = "Hello SecondActivity";
		Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
		intent.putExtra("extra_data", data);
		startActivity(intent);
	}
});

上面的代码中就实现了使用Intent向下一个活动传递数据,数据暂存在Intent中,启动另一个活动后,再把数据从Intent中取出来

public class SecondActivity extends AppCompatActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second_layout);
		
		Intent intent = getIntent();
		String data = Intent.getStringExtra("extra_data");
		Log.d("SecondActivity ", data);
	}
}

如果传递的是整型数据则用getIntExtra(),如果是布尔型数据则使用getBooleanExtra()

2. 向上一个活动传递数据

如果要实现下一个活动向上一个活动传递数据,则启动下一个活动时不再是使用startActivity()方法,而是使用startActivityForResult()来启动下一个活动

button.setOnclickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
		//第二个参数是请求码,只要是一个唯一值就行,后面会用到
		startActivityForResult(intent, 1);
	}
});

再来看看下一个活动是怎么返回数据的

public class SecondActivity extends AppCompatActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second_layout);
		
		Button btn = findViewById(R.id.btn);
		btn .setOnclickListener(new View.OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.putExtra("data_return", "Hello FirstActivity");
				//第一个参数是处理结果
				setResult(RESULT_OK, intent);
				finish();
			}
		});
	}
}

因为我们使用的是startActivityForResult()方法来启动SecondActivity的,当SecondActivity被销毁后会回调上一个活动的onActivityResult()方法,所以我们需要重写这个方法来得到返回数据

//第一个参数就是请求码,第二个参数是处理结果,第三个参数是返回数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	switch (requestCode) {
		case 1:
			if(resultCode == RESULT_OK) {
				String returnData = data.getStringExtra("data_return");
				Log.d("SecondActivity ", returnData );
			}
			break;
	}
}

如果我们不是点击按钮返回,而是通过点击Back键返回的话怎么传递数据呢?答案是可以在SecondActivity中重写onBackPressed()方法来解决

@Override
public void onBackPressed() {
	Intent intent = new Intent();
	intent.putExtra("data_return", "Hello FirstActivity");
	setResult(RESULT_OK, intent);
	finish();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值