在Android编程中,我们有时会遇到一种业务是,由AActivity跳转到BActivity,在BActivity销毁时,BActivity中的相关数据会传到AActivity中
Android中Activity跳转过程中的反向传值:
如何实现?
由AActivity启动BActivity,然后再BActivity
finish()之后,把相关的数据回传给AActivity.
并且在AActivity中执行后续操作.1>
AActivity:
启动BActivity需要使用下列方法:
startActivityForResult(intent)2>
BActivity:
执行完业务,finish时,调用下列方法给AActivity回传数据:
setResult(intent)3>
在AActivity中重写父类的方法:
onActivityResult(),一旦BActivity销毁,那么
将会自动执行onActivityResult方法,并且获取
BActivity回传的intent对象.
下面我们就用一个小的Dome具体介绍一下吧
activity_main.xml 布局中代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.androd_text_dome.MainActivity" >
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btn_get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="doClick"
android:layout_below="@+id/et1"
android:layout_centerHorizontal="true"
android:text="获取数据" />
</RelativeLayout>
效果如图所示
activity_second.xml中布局如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.androd_text_dome.SecondActivity" >
<TextView
android:id="@+id/tv_content"
android:onClick="doClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你好,我是你想要 的数据哦" />
</RelativeLayout>
如图所示
MainActivity中代码如下
package com.example.androd_text_dome;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText etContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控制
etContent =(EditText) findViewById(R.id.et1);
}
public void doClick(View view){
switch (view.getId()) {
case R.id.btn_get:
Intent intent = new Intent(this, SecondActivity.class);
int requestCode = 101;//请求码,可以随意写,只要和OnActivityResult中的请求码想对应就行
startActivityForResult(intent , requestCode);
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 101:
if(resultCode == Activity.RESULT_OK){
String content = data.getStringExtra("content");
etContent.setText(content);
}
break;
}
}
}
SecondActivity代码如下
package com.example.androd_text_dome;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class SecondActivity extends Activity {
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
tvContent = (TextView) findViewById(R.id.tv_content);
tvContent.setClickable(true);
}
public void doClick(View view){
Intent data = new Intent();
data.putExtra("content", tvContent.getText().toString());
setResult(Activity.RESULT_OK, data);
finish();
}
}
SecondActivity销毁之后,将会自动执行onActivityResult方法,并且获取
SecondActivity回传的intent对象.
点击按钮得到的结果如图所示