1、Activity数据传递,从子activity获取返回结果
若要从子activity获取返回信息时,可调用以下activity方法:
public void startActivityForResult(Intent intent, int requestCode)
该方法的第一个参数为intent,第二个参数是请求代码。请求码是先发送给子Activity,然后再返回给父activity的整数。当一个activity启动多个不同类型的子activity,且需要判断要区分消息回馈时,通常会用到该请求码。
2.设置返回结果
实现子activity发送返回信息给父activity,有以下两种方法可以供调用:
public final void setResult(int resultCode)
public final void setResult(int resultCode,Intent data)
通常来说,参数resultcode可以是以下两个预定义常量的任何一个:
(1)Activity.RESULT_OK
(2)Activity.RESULT_CANCELED
结果码总是会返回给父activity。在没有调用setResult(...)方法情况下,如果用户单击了后退按钮,父activity则会收到Activity.RESULT_CANCELED结果代码。
3.返还intent
数据信息需要回送给父activity。我们可以创建一个Intent,附在extra信息后,调用Activity.setResult(int ,Intent)方法将信息回传给父activity.
private void setAnswerShownResult(boolen isAnwerShown){
Intent data=new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN,isAnswerShown);
setResult(RESULT_OK,data);
}
4.例子说明
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.print("frist activity is exe ");
startActivityForResult(new Intent(this, SecondActivity.class), 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.d("xq", "requestCode="+requestCode+"resultCode="+resultCode);
}
}
如果SecondActivity如下:
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.print("SecondActivtiy is exe");
}
}
按back键返回时,执行结果:requestCode=1resultCode=0
如果SecondActivity如下所示:
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.print("SecondActivtiy is exe");
setResult(888);
}
}
按back键返回时,执行结果:
requestCode=1resultCode=888