Android四大组件之一:Activity总结(下)

六.多Activity的跳转及值传递

  1. 一般启动Activity: startActivity(intent)
  2. 一般结束Activity: finish()

  3. 使用Intent进行数据传递
    a. intent携带数据 :intent.putExtra(name, value)
    b. 从intent中取数据:intent.getXxExtra(name)

  4. 带回调的启动:
    a. startActivityForResult(reqCode, intent);
    b. 重写onActivityResult(int reqCode, int resultCode, Intent data)

  5. 带结果的结束:
    setResult(resultCode,intent);

  6. 补充:Intent能携带的数据类型?
    a. 基本类型及其数组
    b. 字符串及其数组
    c. 可序列化类型
    d. 可打包类型(在Service部分会接触到)

下面:通过一个小例子来深入了解多anctivity的跳转及值传递
Android四大组件之一:Activity总结(下)_第1张图片Android四大组件之一:Activity总结(下)_第2张图片

第一个activity:

package com.atguigu.l02_activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

    //视图对象的声明
    private EditText et_main_content;
    private Button btn_main_start1;
    private Button btn_main_start2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //视图对象的初始化
        et_main_content = (EditText) findViewById(R.id.et_main_content);
        btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
        btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);

        //方式二:给两个Button设置点击事件的监听
        btn_main_start1.setOnClickListener(this);
        btn_main_start2.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {//v:即为触发此点击事件的对象,即为两个button
        //创建一个Intent
        Intent intent = new Intent(this, SecondActivity.class);
        //获取EditText中的内容
        String content = et_main_content.getText().toString();
        //携带数据
        intent.putExtra("content", content);

        if(v == btn_main_start1){
            //一般启动
            //启动一个新的Activity
            startActivity(intent);

        }else if(v == btn_main_start2){
            //带回调的启动
            int requestCode = 1;
            //启动一个新的Activity
            startActivityForResult(intent, requestCode);
        }
    }

    //当从SecondActivity返回时的回调方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 1 && resultCode == RESULT_OK){
            String result = data.getStringExtra("result");
            et_main_content.setText(result);
        }
    }
}

SecondActivity:

package com.atguigu.l02_activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

    //视图对象的声明
    private EditText et_main_content;
    private Button btn_main_start1;
    private Button btn_main_start2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //视图对象的初始化
        et_main_content = (EditText) findViewById(R.id.et_main_content);
        btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
        btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);

        //方式二:给两个Button设置点击事件的监听
        btn_main_start1.setOnClickListener(this);
        btn_main_start2.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {//v:即为触发此点击事件的对象,即为两个button
        //创建一个Intent
        Intent intent = new Intent(this, SecondActivity.class);
        //获取EditText中的内容
        String content = et_main_content.getText().toString();
        //携带数据
        intent.putExtra("content", content);

        if(v == btn_main_start1){
            //一般启动
            //启动一个新的Activity
            startActivity(intent);

        }else if(v == btn_main_start2){
            //带回调的启动
            int requestCode = 1;
            //启动一个新的Activity
            startActivityForResult(intent, requestCode);
        }
    }

    //当从SecondActivity返回时的回调方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 1 && resultCode == RESULT_OK){
            String result = data.getStringExtra("result");
            et_main_content.setText(result);
        }
    }
}

完整源码已上传到我的资源里:~

Activity的好兄弟:Intent和IntentFilter

讲到Activity,又不得不提Intent了~
Intent
1. 定义
Three of the core components of an application activities, services, and broadcast receivers are activated through messages, called intents.The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.
组件之间进行交互的信使

2. 结构
componentName、action、extras、data、category、flags

3.分类
显式意图:只能访问本应用中指定的组件

    Intent(Context context,Class clazz)

隐式意图:可以跨应用访问其他应用的组件

        Intent(String action)

3.作用:
①指明要访问的新的组件
②可以携带数据:
写入:
putExtra(String key,Xxx xxx)
setData(Uri uri)
读取:
Xxx getXxxExtra(String key)
getData();

4.理解:intent类似于web中的httpRequest

IntentFilter
1.定义
To inform the system which implicit intents they can handle, activities, services, and broadcast receivers can have one or more intent filters.
用来与隐式意图匹配的一个匹配规则对象

2.理解
IntentFilter类似于web中的为Servlet配置的uri-patten

注意!!!
Intent:翻译为意图,
是Activity\Service\BroadcastRecevier三者之间进行通信的信使。
不是!四大组件之一

你可能感兴趣的:(Android基础)