在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Activity处理。这样的数据交流就要用到回调函数onActivityResult。
直接进入实例
Intent newIntent = new Intent(MainActivity.this,LogInActivity.class);
// 传递参数
newIntent.putExtra("这是传递给子Activity中的信息", "MainActivity");
// 开始一个新的 Activity等候返回结果
startActivityForResult(newIntent,999);
在主Activity中,应该重写onActivityResult方法,该方法是用来接收子Activity中的返回值,及处理结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
//这个requestCode返回码,是子Activity中定义的不同处理结果的标识,比如,这里用switch 处理不同结果
case 999:
//取得来自SecondActivity页面的数据,并显示到画面
Bundle bundle = intent.getExtras();
//获取Bundle中的数据,注意类型和key
String username = bundle.getString("username");
Toast.makeText(this, "成功返回了", Toast.LENGTH_LONG).show();
}
假设子Activity中有一个定义submit的方法,用来监听按钮触发返回的事件,其中其中的setResult()方法相当于启动了Activity,不要忘记finish(),否则这个界面切不会去
public void submit(View v) {
int sw = v.getId();
switch (sw) {
case R.id.login:
String username = usernametext.getText().toString();
Bundle bd = new Bundle();
bd.putString("username", username);
Intent it = new Intent();//注意,这里是空的,有Activity的话,会覆盖前面主Activity的回调监听
it.putExtras(bd);
this.setResult(999, it);;
finish();
break;
default:
Toast.makeText(this, R.string.errordo, Toast.LENGTH_LONG).show();
break;
}
}
以上是同一个程序内Activity中通信方式,如果不是在同一个程序的话,用uri来做,有需要的话,我再完善