父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用到的。

posted on 2017-10-10 14:25  dreamstar  阅读(223)  评论(0编辑  收藏  举报