两个Activity通信&&startActivityForResult的使用

本文介绍了在Android开发中,如何使用startActivityForResult方法实现Activity之间的双向通信。通过示例展示了MainActivity如何启动OtherActivity,并在OtherActivity中处理数据,最后返回结果到MainActivity的onActivityResult方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个Activity之间通信可以通过Handler方法、Intent的方法等,但是有时候需要在两个Activity之间传递数据,需要使用到startActivityForResult,请看下面的情况:


假设现在有两个Activity:MainActivity和OtherActivity,OtherActivity通过MainActivity中的点击事件启动:

public void onClick(View view){
    Intent intent=new Intent(MainActivity.this,OtherActivity.class);
    startActivity(intent);
}

然而在OtherActivity在返回之后,需要向MainActivity传递或更新数据,则以下方法是不行的:

//OtherActivity返回MainActivity事件点击
......
public void onClick(View view){
    Intent intent=new Intent(OtherActivity.this,MainActivity.class);
    Bundle bundle=new Bundle();
    bundle.putInt("data",data);//data为我们需要传递的数据
    intent.putExtras(bundle);
    startIntent(intent);
}


//MainActivity中获取Intent
......
public  void onCreate(Bundle bundle){
    super.onCreate(bundle);
    setContentView(R.id.activity_main);

    Intent intent=getIntent();//获取Intent
    Bundle data=intent.getExtras();
    int infor=bundle.getInt("data");//获取数据
    ......

}

以上方法只能单项传递数据:MainActivity向OtherActivity传递数据,不能实现OtherActivity向MainActivity传递数据,因为MainActivity是程序第一个启动的程序,在onCreate方法中将获取不到intent,程序将无法运行,导致RunTimeException!


而startActivityForResult(Intent intent, int requestCode)方法打开OtherActivity,OtherActivity 关闭后会向MainActivity传回数据,为了得到传回的数据,必须在MainActivity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。

在MainActivity中书写的代码如下:

public void onClick(View v) {
    //第二个参数为请求码,可以自己编写
    Intent intent=new Intent(MainActivity.this, OtherActivity.class);
     startActivityForResult(intent, 0x10);
}

//为了得到OtherActivity返回的数据,必须重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    int data = data.getExtras().getInt("data");//得到OtherActivity 关闭后返回的数据
    }

在OtherActivity中代码如下:

public void onClick(View v) {
    Intent intent = new Intent(OtherActivity.this,MainActivity.class);
    //把返回数据存入Bundle
    Bundle bundle=new Bundle();
    bundle.putInt("data", data);
    intent.putExtras(bundle);
    //设置返回数据,setResult第一个参数为int resultCode,第二个为 Intent intent
    setResult(0x12, intent);
    //关闭OtherActivity
    finish();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值