Android学习之路(八)之 Activity数据返回



Activity数据返回

通过一个activity跳转到另一个activity,并且在这个activity中做一些事件处理,并将信息返回给前一个activity,然后销毁。

以前我们进行Intent跳转时,是使用startActivity(Intent intent)方法。

现在我们使用的是startActivityForResult(Intent intent, int requestCode)方法。

下面来看一个例子:

Android学习之路(八)之 Activity数据返回_第1张图片

通过点击选择联系人,跳转到一个activity上。

Android学习之路(八)之 Activity数据返回_第2张图片

这里对TextView对象添加了点击事件处理,用来将信息返回并销毁。比如说点击123456789之后:

Android学习之路(八)之 Activity数据返回_第3张图片

将信息显示在了原activity的EditText中。

来看一下MainActivity中的按钮点击事件代码:

bt_select.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(MainActivity.this, ResultActivity.class);
		startActivityForResult(intent, 0);
	}
});

通过startActivityForResult方法进行跳转,这里第二个参数先不管,后面再讲。

然后再看一下ResultActivity中的TextView点击事件代码:

public void onClick(View v) {
	Intent intent = new Intent();
	if(v == tv_phoneNumber1) {
		intent.putExtra("phoneNumber", tv_phoneNumber1.getText().toString());
	}
	else if(v == tv_phoneNumber2) {
		intent.putExtra("phoneNumber", tv_phoneNumber2.getText().toString());
	}
	setResult(0 ,intent);
	finish();
}

上述点击不同的TextView将信息存入Intent中,然后通过setResult()方法,将结果返回,然后finish(),销毁activity。

这里setResult方法的原型如下:

setResult(int resultCode, Intent intent);同样这里的第一个参数也不管,后面会讲到。

那么在MainActivity中如何来接收这些信息呢?

这里需要覆写一个方法,onActivityResult(int requestCode, int resultCode, Intent data);

我们直接看代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if(data == null)
		return;
	Bundle bundle = data.getExtras();
	String phoneNumber = bundle.getString("phoneNumber");
	et_phoneNumber.setText(phoneNumber);
}

这里data可能为空,所以先要判断一下。

这里面的代码其实就是接收Intent中的信息。就不多说了,只是把这些代码写到了这个onActivityResult方法中罢了。

OK,接下来讲一下requestCode和resultCode。

requestCode:请求码

通过调用startActivityForResult(Intent intent, int requestCode)方法来打开一个新的activity,我们需要为这个方法传入两个参数,其中第二参数就是请求码,该参数根据需求自行设置,用于标识请求来源。比如说:在一个activity上存在两个按钮,这两个按钮都是打开同一个activity,当这个activity关闭时,都会调用前面activity中的onActivityResult(int requestCode, int resultCode, Intent data)方法,该方法中就可以通过请求码requestCode来作不同的业务处理。

在上述MainActivity中的按钮点击事件中,我们看到startActivityForResult中传入的第二个参数是0,那么,只要在onActivityResult中,通过判断requestCode==0就可以对该按钮所需要的业务进行处理了。

resultCode:结果码

在一个activity中,有时候我们会通过startActivityForResult()方法来打开不同的activity,来处理不同的业务。当这些activity关闭后,系统就会调用前面activity中onActivityResult(int requestCode, int resultCode, Intent data)方法,该方法中就可以通过结果码resultCode来作不同的业务处理。

在上述ResultActivity中我们看到的setResult中的第一个参数,这个就是结果码,不同的activity返回不同的结果码,在MainActivity中的onActivityResult中对resultCode进行判断就行了。


THE END~


你可能感兴趣的:(android,Activity,请求码,结果码,Activity数据返回)