您的位置:首页 > 其它

活动——向下一个或上一个活动传递数据

2017-10-27 09:45 489 查看
该代码在活动——使用显式Intent所建立的项目下运行

向下一个活动传递数据

目的: FirstActivity中有一个字符串,将字符串传递给SecondActivity中

代码

修改FirstActivty中代码

button1.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);
}
});


解释

putExtra():接受两个参数

- 第一个参数:键,用于从Intent中取值。

- 第二个参数:真正要传递的数据

代码

在SecondActivity中将传递的数据取出,并打印

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);
}
}


解释

通过getIntent()方法获得启动SecondAcitvity的Intent,然后用getStringExtra()方法,传入相应的键值,就得到了传递的数据。 如果传递的是整型数据用getIntExtra(),如果传递的是布尔型数据用getBoolExtra()方法。

getStringExtra():用来获取传递的数据。

运行结果:

点击Button 1



返回数据给上一个活动

目的:返回数据给上一个活动

代码:

修改FirstActivity中按钮的点击事件

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);
}
});


解释

startActivityForResult():两个参数

第一个参数:Intent。

第二个参数:请求码,只要是唯一值就可以。

代码:

在SecondActivity中给按钮注册点击时事件,并添加返回数据的逻辑。

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中,然后调用setResult()方法

setResult():专门用于向上一个活动返回数据。接收两个参数。

第一个参数:用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED。

第二个参数:把带有数据的Intent传递回去。

代码

由于使用startActivityForReslut()方法启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此在FirstActivity写这个方法得到返回的数据。

@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:
}
}


解释:

由于一个活动有可能通过startActivityForReslut()方法启动很多不同的活动,每个活动返回的数据都会调用onActivityResult()方法,因此首先通过检查requestCode的值来判断数据来源,确定数据来源后,在通过resultCode 的值来判断处理结果是否成功。

onActivityResult():带有三个参数。

第一个参数:requestCode,即我们在启动活动时传入的请求码。

第二个参数:resultCode , 即在返回数据时传入的处理结果。

第三个参数:data, 即携带返回数据的Intente。

-

运行结果:

从FirstActivity中进入SecondActivity,再点击Button2返回FirstActivity。



**目的:**SecondActivity通过Back建回到FirstActivity时传递数据。

代码:

在SecondActivity中重写onBackPressed()方法

@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: