父activity启动子activity并传递数据
1. Intent
component : activity,service,broadcast receiver以及content provider
component 与操作系统 通信的一种媒介工具 是intent。
intent是一种多用途通信工具。
Intent类的构造方法
//Class类型参数告诉ActivityManager应该启动哪个activity
//Context参数告诉ActivityManager在哪里可以找到它
public Intent(Context packageContext,Class<?> cls)
Intent intent = new Intent(QuizActivity.this,CheatActivity.class);
在QuizActivity中启动CheatActivity
Intent intent = new Intent(QuizActivity.this, CheatActivity.class);
startActivity(intent);
显示Intent
通过指定Context与Class对象,然后调用intent的构造方法来创建Intent,则创建的是显示intent
同一应用里,使用显示intent来启动activity
隐式intent
一个应用的activity需要启动另一个应用的activity,可以通过创建隐式intent来处理。
2. 父activity启动activity
//Intent参数告诉ActivityManager要启动哪个activity
public void startActivity(Intent intent)
activity调用startActivity()方法时,调用请求实际发给了ActivityManager.ActivityManager负责创建Activity实例并调用起onCreate(……)方法。
在启动activity之前,ActivityManager会检查确认指定的class是否已经在配置文件中声明。如果没有声明,会抛出ClassNotFoundException异常。
销毁activity
单击返回按钮,会销毁当前activity
2. Activity之间传递数据
数据作为extra信息,由启动方附加在intent上发送出去。
接受方activity接收到操作系统转发的intent后,访问并获取其中的extra数据信息。
往extra添加数据
//name是extra的名字
//value是传送的数据
public Intent putExtra(String name, boolean value)
该方法形式多变,不变的是,它总有两个参数。一个参数是固定为String类型的键值,另一个参数值可以是多种数据类型。
该方法返回intent自身,因此,需要时可以进行链式调用。
从extra获取数据
//name是extra的名字
//defaultValue是指定默认值,它在无法获取有效键值时使用
public boolean getBooleanExtra(String name,boolean defaultValue)
1. 不用Intent类的已封装的构造方法。自己在子activity中定义Intent的构造方法。
public static Intent newIntent(Context packageContext, boolean answerIsTrue) {
Intent intent = new Intent(packageContext, CheatActivity.class);
intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
return intent;
}
3. 父activity(QuizActivity)中新建Intent变量时,调用子activity(CheatActivity)中构造方法
//传递数据
Boolean answerIsTrue = true;
Intent intent = CheatActivity.newIntent(QuizActivity.this, answerIsTrue);
//启动activity
startActivity(intent);
3. 在子activity获取数据
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cheat);
//获取QuizActivity传递过来的答案
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);
}
Activity.getIntent()方法返回了由startActivity()方法转发的Intent对象。
父activity启动子activity并且传递数据
创建Intent, 附加extra信息后,调用Activity.startActivity(Intent)方法启动子activity,子activity中获取数据
从子activity获取返回结果
创建Intent,附加extra信息后,调用Activity.setResult(int,Intent)方法将信息回传给父Activity。
回传给父activity是一个intent实例和结果代码。
通过intent获取extra信息的代码还是封装在子activity的某个方法中。父activity通过调用这个方法来获取信息。
总之,putExtra和getExtra方法都是在子activity用到的。