startActivityForResult 和 setResult

  前几天朋友问我关于Activity之间交互的问题,趁着有时间简单总结总结下:

  1、从一个Activity(A) 启动一个新的Activity(B)

       这个平常我们用的比较多,直接使用Intent,在Activity(A),如下:

    Intent intent = new Intent(A.this,B.class);
    intent.putExtra("key", "value");
    startActivity(intent);

     在这里可以传递八种基本数据类型(int,String,long,boolean等),以及Bundle(类似Map集合)。

      B中接收传递的参数如下:

    String s = getIntent().getExtras().getString("key");

    也可以用:

  String s = getIntent().getExtras().getString("key","");

  2、在某些情况下,在Activity(A)启动Activity(B)的同时,我们又希望B能给A返回特定的数据,比如说现在A里有一个包含用户个人信息的列表,点击增加用户信息启动B,

B里完成之后通知A刷新列表,具体使用如下:

      启动Acitivty(B):在这里我们不使用startActivity,而用startActivityForResult,如下:

       public static final int requestCode = 1;   //声明全局变量
       Intent intent = new Intent(A.this,B.class);
       startActivityForResult(inten t, requestCode);

   同时在A中重新onActivityResult方法:

    /**
     * requestCode 与startActivityForResult 中的requestCode对应
     * resultCode  返回的结果状态,通常有三种:正确,错误,取消,这个比较宽泛,可以自己定义
     * data  返回的数据通常在data里面
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != RESULT_OK){
            return;
        }
        if(requestCode == 1){
            String s = data.getStringExtra("key");
        }
    }

  在B中:

      Intent intent = new Intent();
      intent.putExtra("key", "value");
      setResult(RESULT_OK, intent); //第一个参数对应于onActivityResult中的resultCode  intent对应于data

  这里注意一点:setResult一定要在finish()之前调用。

posted @ 2015-09-07 10:28  还没好好感受年轻  阅读(1434)  评论(1编辑  收藏  举报