前几天朋友问我关于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()之前调用。
时间: 2024-11-11 21:24:02