Activity的启动与通信

Activity是Android组件中最基本也是最常见的组件,一般情况下一个Activity就是对应一个单独的屏幕。

注:一下代码中父Activity用parent表示,子Activity用child表示(子Activity对应的Java文件为child.java)。

 

 

一.启动Activity

    要启动一个新的Activity,有以下三个步骤(在父Activity中执行

    1.新建一个Intent(有两种方法)

       方法①:

Intent intent = new Intent();
intent.setClass(parent.this, child.class); 

       方法②:

Intent intent = new Intent(parent.this, child.class)

 

    2.启动Activity(有两种方法)

       方法①:

startActivity(intent);

       方法②:

startActivityForResult(intent, 0);
//当第2个参数大于等于时,将会在子Activity关闭时调用父Activity的onActivityResult()函数

       以上两个方法的差异在于可以在方法②启动的Activity关闭时,回调数据给启动它的父Activity,进而实现Activity之间的通信。(稍后将会讲述)

 

    3.在AndroidManifest.xml文件中注册Activity

       在AndroidManifest.xml文件下的“<application></application>”标签之间填入一个新的<activity>标签,例:

<activity
            android:name=".child" >
</activity>

       其中,<activity>标签里可以加入“android:them”属性来设置该Activity的样式。

 

 

二.Activity之间的通信

    Activity之间有两种通信方式

    方式①:父Activity向子Activity传递信息

//在父Activity创建子Activity时执行
Intent intent = new Intent(parent.this, child.class);
Bundle bundle = new Bundle();
bundle.putString("msg", msg);    //msg为要传递的信息(String类型)
intent.putExtras(bundle);
startActivity(intent);
//在子Activity中获取数据
String msg = this.getIntent().getExtras().getString("msg");

 

    方式②:子Activity关闭后,要回调数据给父Activity

//在父Activity创建子Activity时执行
Intent intent = new Intent(parent.this, child.class);
Bundle bundle = new Bundle();
bundle.putString("msg", msg);    //msg为要传递的信息(String类型)
intent.putExtras(bundle);
startActivityForResult(intent, 0);
//当第2个参数大于等于时,将会在子Activity关闭时调用父Activity的onActivityResult()函数
//在子Activity关闭时
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putString("msg",msg);    //msg为要传递的信息(String类型)
intent.putExtras(bundle);
setResult(RESULT_OK,intent);
finish();
//在父Activity中加入onActivityResult函数,以接收回调的信息
@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data_intent){
    super.onActivityResult(requestCode, resultCode, data_intent);
     if(resultCode == RESULT_CANCELED)
            setTitle("cancel");
     else if (resultCode == RESULT_OK){
            Bundle bundle = data_intent.getExtras();
            if(bundle != null){
                //获取子Activity传送的数据
           String msg = bundle.getString("msg");              
            }
       }
}

 

你可能感兴趣的:(启动Activity,Activity之间的通信)