Activity之间的数据传递

主要功能:

在一个主界面(主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();//此界面不关闭会一直加载此界面  不会返回上一界面

            };

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值