activity 之间基于intent 的通信
# 如何打开新活动
我们的一个应用程序 是由多个活动的,那么在活动之间如何跳转就是一个很有趣的事情;
1
| public void startActivity(Intent intent)
|
我们通过上面的函数来造访新的页面,该函数不是一个针对于activity的函数,而是针对操作系统,准确的说 它将intent发送给系统级别的ActivityManager
ActivityManager主要就是用来管理众多Activity的
我们通过传递intent 告诉ActivityManager下面打开那个活动;
1 2 3
| Intent i =new Intent(MainActivity.this,CheatActivity.class); startActivity(i);
|
# 传递数据玩
## 仅仅传过去
1 2 3 4 5 6 7 8 9 10
| String data="Hello SecondActivity" Intent intent =new Intent(FirstActivity.this,SecondActivity.class) intent.putExtra("extra_data",data); Intent intent=getIntent(); String data=intent.getStringExtra("extra_data"); Log.d("SecondActivity",data);
|
## 传入并返回值
首先要能够从A传到B 所以有了startactivityforresult(Intent intent,int requestCode)
紧接着,B看到A的信件后,要寄一封回信,所以有setResult(int resultCode, Intent data) 将信寄出
那么对于A来说,有一个收信的地方就非常重要,onActivityResult(int requestCode, int resultCode, Intent data)
requestCode 就是为了用于 A收信的 假设A与B要谋反,A给B寄信,B回信的时候要标明信中内容是绝密还是掩人耳目。这样A在收信的时候就不会存在问题啦。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1); * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法 * * requestCode 请求码,即调用startActivityForResult()传递过去的值 * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String result = data.getExtras().getString("result"); Log.i(TAG, result); } }
|
1 2 3 4 5 6 7 8
| Intent intent = new Intent(); intent.putExtra("result", "My name is linjiqin"); OtherActivity.this.setResult(RESULT_OK, intent); OtherActivity.this.finish();
|