Android 复习2 有关activity

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.putExtra函数在意图中加些东西;
Intent intent=getIntent();//写在onCreate方法中
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
//取出intent中的东西

## 传入并返回值

首先要能够从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");//得到新Activity 关闭后返回的数据
Log.i(TAG, result);
}
}
1
2
3
4
5
6
7
8
Intent intent = new Intent();
//把返回数据存入Intent
intent.putExtra("result", "My name is linjiqin");
//设置返回数据
OtherActivity.this.setResult(RESULT_OK, intent);
//关闭Activity
OtherActivity.this.finish();