当前位置: 代码迷 >> Android >> Activity数据返回
  详细解决方案

Activity数据返回

热度:78   发布时间:2016-04-28 00:51:26.0
Android学习之路(八)之 Activity数据返回


Activity数据返回

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

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

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

下面来看一个例子:

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

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

将信息显示在了原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~


  相关解决方案