Android的startActivityForResult(Intent intent, int requestCode)方法可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得前Activity结束之后返回的数据。在startActivityForResult(Intent intent, int requestCode)方法中,第一个参数intent表示启动指定的Activity并且期望指定的Activity返回结果,第二个参数代表请求码,表示是哪个Activity请求返回结果;当新的Activity关闭后,系统都会自动调用回调方法onActivityResult(int requestCode, int resultCode, Intent data),为了知道该方法是由谁触发,可以使用requestCode,为了知道该结果由哪个新的Activity所返回,可以使用resultCode,resultCode由新的Activity结束前调用setResult(int resultCode, Intent intent)设置,data则是新的Activity所返回的数据。以下例子点击按钮进入注册界面,提交数据返回结果到第一Activity进行显示。
1.主界面只包含一个Button控件和TextView控件。(省略)
2.注册界面的xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/activity_vertical_margin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账号:"
android:textSize="16sp"/>
<EditText
android:id="@+id/etName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="16sp"/>
<EditText
android:id="@+id/etPass"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:"
android:textSize="16sp"/>
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:checkedButton="@+id/male">
<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"/>
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
</RadioGroup>
</LinearLayout>
<Button
android:id="@+id/btnSubmit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="注册并返回上一页面"
/>
</LinearLayout>
3.主界面java代码:
public class MainActivity extends Activity {
private Button BtnReg;
private TextView TvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BtnReg = (Button)findViewById(R.id.btnReg);
TvShow = (TextView)findViewById(R.id.tvShow);
BtnReg.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,RegActivity.class);
startActivityForResult(intent, 10); //请求码用于标识请求返回数据
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==10 && resultCode==1) //匹配请求码和结果码,需要知道谁请求返回数据和谁返回数据,匹配则显示数据
{
StringBuilder sb = new StringBuilder();
sb.append("您的姓名:").append(data.getExtras().getString("name")).append("\n")
.append("您的密码:").append(data.getExtras().getString("pass")).append("\n")
.append("您的性别:").append(data.getExtras().getString("sex"));
TvShow.setText(sb.toString());
}
}
}
4.新Activity的java代码:
public class RegActivity extends Activity {
private EditText et_name;
private EditText et_pass;
private RadioButton rb_male;
//private RadioButton rb_female;
private Button b_submit;
private final int RESULTCODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
et_name = (EditText)findViewById(R.id.etName);
et_pass = (EditText)findViewById(R.id.etPass);
rb_male = (RadioButton)findViewById(R.id.male);
//rb_female = (RadioButton)findViewById(R.id.female);
b_submit = (Button)findViewById(R.id.btnSubmit);
b_submit.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
/**
* 此处省略判断输入是否为空以及输入是否非法
*/
String str_name = et_name.getText().toString();
String str_pass = et_pass.getText().toString();
String str_sex = rb_male.isChecked() ? "男":"女";
Intent data = getIntent(); //获取上一个Activity对应的Intent
data.putExtra("name", str_name);
data.putExtra("pass", str_pass);
data.putExtra("sex", str_sex);
setResult(RESULTCODE, data);//设置结果码并返回结果
finish(); //结束该Activity
}
});
}
}
4.配置AndroidManifest.xml
<activity
android:name="com.czh.startactivityforresultdemo.RegActivity"
android:label="@string/app_name" >
</activity>
5.运行结果:
主界面:
注册界面:
返回结果后的主界面: