主要功能:
在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。
<1>startActivityForResult(Intent intent, int requestCode);
第一个参数:一个Intent对象
第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回
<2>onActivityResult(int requestCode, int resultCode, Intent data)
第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。
这个requestCode和startActivityForResult中的requestCode相对应。
第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。
第三个参数:一个Intent对象,带有返回的数据。
<3>setResult(int resultCode, Intent data)
调用这个方法把Activity想要返回的数据返回到父Activity
第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK。
第二个参数:一个Intent对象,返回给父Activity的数据。
本实例一共有三个Activity。点击飞往火星跳转到otherActivity,把地球带给火星的消息显示在otherActivity中。点击返回地球时把火星带给地球的消息传到主Activity.
同理:
点击飞往月球跳转到thirdActivity,把地球带给月球的消息显示在thirdActivity中。点击返回地球时把月球带给地球的消息传到主Activity.
主要代码如下:
主页面:
Button button = FindViewById<Button>(Resource.Id.btn1);//月球
button.SetOnClickListener(new ClickListener());
Button button2 = FindViewById<Button>(Resource.Id.btn2);//火星
button2.SetOnClickListener(new ClickListener2());
public class ClickListener : Java.Lang.Object, View.IOnClickListener
{
public void OnClick(View v)
{
Activity act = v.Context as Activity;
Intent intent = new Intent();
Bundle b = new Bundle();
intent.SetClass(act, typeof(yueqiu));
b.PutString("name", "我是来自【地球】的haha,很开心来到月球");
intent.PutExtras(b);
act.StartActivityForResult(intent, 0);
//act.Finish();//是关闭了本页面 子页面将无法在跳转回此页面
}
}
public class ClickListener2 : Java.Lang.Object, View.IOnClickListener
{
public void OnClick(View v)
{
Activity act = v.Context as Activity;
Intent intent = new Intent();
Bundle b = new Bundle();
intent.SetClass(act, typeof(huoxing));
b.PutString("name", "我是来自【地球】的haha,很开心来到火星");
intent.PutExtras(b);
act.StartActivityForResult(intent, 0);
//act.Finish();
}
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (resultCode == Result.Ok)
{
Bundle b = data.Extras;
string name = b.GetString("name");
MessageBox.Show(this, "提示", string.Format("{0}", name));
}
}
子级页面:
Bundle b = this.Intent.Extras;
MessageBox.Show(this, "信息", Intent.GetStringExtra("name"));
Button button = FindViewById<Button>(Resource.Id.btn1);
//button.SetOnClickListener(new ClickListener());
button.Click += (sender, e) =>
{
Intent intent = new Intent();
Bundle bb = new Bundle();
//intent.SetClass(this, typeof(Activity1));//SetResult 返回上一界面 所以不需要重新定位
bb.PutString("name", "我是来自【火星】的,很开心来到地球");
intent.PutExtras(bb);
//SetResult(Result.Ok, intent);
this.SetResult(Result.Ok, intent);
//StartActivity(intent)
this.Finish();//此界面不关闭会一直加载此界面 不会返回上一界面
};