Android Intent传递数据

时间:2022-06-28 03:05:46

刚开始看郭大神的<<第一行代码>>,实现以下里面的一些例子.Intent传递数据.

我们利用显示的方式进行Intent的启动.

1.启动intent并输入数据.

Intent intent=new Intent(MainActivity.this,TwoActivity.class
);
intent.putExtra("data", "hello two");
startActivity(intent);

2.接收数据.

Intent intent=getIntent();
Log.i("data", intent.getStringExtra("data"));

注.intent传递数据的方式是键值对的形式,所以我们要根据预键来取.这里我们传递的是一个String字符串,当然你也可以传递其他数据类型.不过取的时候我们要根据数据类型来使用不同方法取.如下(当然还有很多,以此类推).

		intent.getIntExtra(name, defaultValue);
intent.getBooleanExtra(name, defaultValue);

3.返回数据

Intent intent1=new Intent(MainActivity.this,TwoActivity.class
); intent1.putExtra("data", "hello two");
startActivityForResult(intent1, 1);

在这里我们使用的不是startActivity();而是startActivityForResult();,这是我们要返回数据,所以必须要一个用来识别返回数据的code.

Intent intent=getIntent();
data=intent.getStringExtra("data");
Log.i("data", data);
findViewById(R.id.btn_twolayout).setOnClickListener(new OnClickListener(
) { @Override
public void onClick(View v) {
Intent intent=new Intent();
intent.putExtra("data1", data+"收到.");
setResult(RESULT_OK, intent);
finish();
}
});

接收并返回数据.setResult(RESULT_OK, intent);.然后我们使用finish();将当前的activity销毁掉,返回上一个activity.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==1) {
if (resultCode == RESULT_OK) {
Log.i("data1", data.getStringExtra("data1"));
}
}
super.onActivityResult(requestCode, resultCode, data);
}

最后我们重写onActivityResult();方法,并判断requestCode是否等于我们预先设定好的code,和resultCode是否等于RESULT_OK.


在onActivityResult();方法里带有三个参数,分别是requestCode,我们在启动活动时传入的请求码.resultCode,我们在返回数据时候传入的处理结果.data,携带着返回数据的intent.

此外我们还有一个问题,如果我们不是通过预先设定好的按钮返回上一个activity,而是通过back按键返回怎么办?

@Override
public void onBackPressed() {
Intent intent=new Intent();
intent.putExtra("data1", data+"收到.");
setResult(RESULT_OK, intent);
finish();
}

这个时候我们可以通过重写onBackPressed(); 方法来解决.这样的话当我们按下back按键,就会去执行onBackPressed();方法中的代码.

么么哒的效果图 o.o Android Intent传递数据