在一个主界面(主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来做,有需要的话,我再完善
转载于:https://www.cnblogs.com/haoxiqiang/archive/2013/02/01/2889463.html
