如何使用Intent在活动中穿梭
作者:互联网
显式Intent的使用
- Intent的 Intent(Context packageContext,Class<?> cls),这个函数中,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。Activity类中提供一个startActivity()方法,专门用来启动活动
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
隐式Intent的使用
- 隐式Intent不明确指出要启动哪个活动,而是指定了一系列更为抽象的action和category等信息,由系统分析Intent并帮我们找出合适的活动去启动。
- 只有<action>和<category>中的内容同时能匹配上Intent中指定的action和category时,这个活动才能响应这个Intent。
- 一个Intent中只能指定一个action,而可以指定多个category。可以调用Intent中的addCategory()来添加一个category,添加之后,需要在<intent-filter>标签中添加一个category的声明,否则会导致程序的崩溃。
向下一个活动传递数据
- Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递数据暂存在Intent中,启动了另一个活动之后,只需把这些数据再从Intent中拿出来即可。
public void onClcik(View v){
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
putExtra()方法中接收两个参数,第一个是键,用于后面从Intent中取值,第二个才是真正要传递的数据。
- 如上代码所示,将字符串data存储在Intent中后,要在SecondActivity中用到时,方法如下所示:
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);
}
首先通过getIntent()方法获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应键值。
返回数据给上一个活动
- Activity中还有一个startActivityForResult()方法,期望在活动销毁时能返回一个结果给上一个活动。这个方法有两个参数,第一个仍是intent,第二个是请求码,用于在之后的回调中判断数据的来源。
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);
}
}
这里使用startActivityForResult()方法来启动SecondActivity,请求码只要是一个唯一值即可。在SecondActivity中给按钮注册点击事件,并在点击事件添加返回数据的逻辑
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Button button2 = (Button) findViewById(R.id.button_2);
button2.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();
}
});
}
这里构建的Intent仅用于传输数据。把数据存储在Intent中后,调用了setResult()方法,专门用于向上一个活动返回数据的。此方法接收两个参数,第一个用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED,第二个则是把带有数据的Intent传递回去,然后用finish()方法销毁当前活动。
- 由于我们是使用startActivityForResult()方法来启动SecondActivity的,活动被销毁后会回调回上一个活动的onActivityResult()方法,因此我们需要重写这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
onActivityResult()方法中有三个参数,第一个requestCode,即在启动活动时传入的请求码(判断数据来源的依据)。第二个是resultCode,即在我们返回数据时传入的处理结果(判读数据处理是否成功)。第三个是data,即携带数据返回的Intent。
标签:SecondActivity,void,如何,穿梭,Intent,intent,活动,data 来源: https://blog.csdn.net/weixin_43568110/article/details/94863165