Activity之间的信息传递方式

在一个主界面(主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来做,有需要的话,我再完善

posted on 2013-02-01 18:01  郝锡强  阅读(371)  评论(0编辑  收藏  举报

导航