两个Activity通信&&startActivityForResult的使用

来源:互联网 发布:网络金融营销普遍 编辑:程序博客网 时间:2024/06/07 12:59

两个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方法@Overrideprotected 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();}


0 0
原创粉丝点击