2.3 使用 Intent 在活动之间穿梭

2.3.1 使用显式 Intent

# app/src/main/res/layout/second_layout.xml<?xml version="1.0" encoding="utf-8"?>    
# app/src/main/java/com/example/activitytest/SecondActivity.javapublic class SecondActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.second_layout);    }}
# app/src/main/AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>                                 #指定活动标题                               #设为主活动                 #设为启动器                                                        #注册第二个活动            
public class FirstActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.first_layout);        Button button1 = (Button) findViewById(R.id.button_1);        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 实例化 Intent,第一个参数为当前上下文,第二个参数为要启动的目标活动                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);                // 启动目标活动                startActivity(intent);            }        });    }

2.3.2 使用隐式 Intent

            # 指定当前活动相应的行为是 ACTION_START                # 指定当前活动相应的分类是 DEFAULT            
public class FirstActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.first_layout);                Button button1 = (Button) findViewById(R.id.button_1);        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 实例化 Intent,并设置行为是 ACTION_START,不设置分类则默认分类是 DEFAULT                Intent intent = new Intent("com.example.activitytest.ACTION_START");                startActivity(intent);            }        });    }

增加活动分类:

            # 指定当前活动相应的行为是 ACTION_START                # 指定当前活动相应的分类是 DEFAULT                # 指定当前活动相应的分类是 MY_CATEGORY            
public class FirstActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.first_layout);                Button button1 = (Button) findViewById(R.id.button_1);        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 实例化 Intent,并设置行为是 ACTION_START                Intent intent = new Intent("com.example.activitytest.ACTION_START");                // 为 Intent 设置分类是 MY_CATEGORY                intent.addCategory("com.example.activitytest.MY_CATEGORY");                startActivity(intent);            }        });    }

2.3.3 更多隐式 Intent 的用法

button1.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        // 实例化 Intent,并设置行为是 ACTION_VIEW        Intent intent = new Intent(Intent.ACTION_VIEW);        // 设置 Intent 的 Uri        intent.setData(Uri.parse("https://www.baidu.com"));        // 启动活动,会打开系统浏览器访问设置的网址        startActivity(intent);    }});
<?xml version="1.0" encoding="utf-8"?>    
                            # 指定数据的协议部分是 http            

调用系统拨号界面:

button1.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        Intent intent = new Intent(Intent.ACTION_DIAL);        intent.setData(Uri.parse("tel:10086"));        startActivity(intent);    }});

2.3.4 向下一个活动传递数据

button1.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        String data = "Hello SecondActivity";        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);        // 暂存数据到 Intent 中        intent.putExtra("extra_data", data);        startActivity(intent);    }});
public class SecondActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.second_layout);        Intent intent = getIntent();        // 从 Intent 中取出数据        String data = intent.getStringExtra("extra_data");        Log.d("SecondActivity", data);    }

2.3.5 返回数据给上一个活动

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.first_layout);    Button button1 = (Button) findViewById(R.id.button_1);    button1.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);            // 启动活动,并接受活动销毁时返回的数据,第二个参数为请求码,用于判断数据的来源            startActivityForResult(intent, 1);        }    });}// 下一个活动被销毁时的回调函数@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    // 判断数据来源    switch (requestCode) {        case 1:            if (resultCode == RESULT_OK) {                String returnedData = data.getStringExtra("data_return");                Log.d("FirstActivity", returnedData);            }            break;        default:    }}
public class SecondActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.d("SecondActivity", "Task id is " + getTaskId());        setContentView(R.layout.second_layout);        Button button2 = (Button) findViewById(R.id.button_2);        button2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                // 暂存数据到 Intent 中                intent.putExtra("data_return", "Hello FirstActivity");                // 向上一个活动返回数据,第一个参数一般为 RESULT_OK                setResult(RESULT_OK, intent);                // 销毁当前活动                finish();            }        });    }    // 绑定按下返回键时的逻辑,与按钮点击的逻辑一致    @Override    public void onBackPressed() {        Intent intent = new Intent();        intent.putExtra("data_return", "Hello FirstActivity");        setResult(RESULT_OK, intent);        finish();    }}

更多相关文章

  1. Android(安卓)ANR keyDispatchingTimedOut Error while continuo
  2. Android(安卓)选择文件并加载数据到界面
  3. Android中实现输入图片地址浏览图片操作
  4. Android(安卓)的一些提示框
  5. Android(安卓)day_3 (登录案例 SharedPreferences 的使用)
  6. Android(安卓)jni 编程(参数的传递,成员,方法的)相互访问
  7. Android(安卓)保存图片到SQLite
  8. (Android) ContentProvider 实例
  9. android 利用pull解析xml数据

随机推荐

  1. 【第765期】你不懂JS:this豁然开朗!
  2. 【第766期】你不懂JS:对象
  3. No.8 bin和sbin的区别
  4. 聊聊“干货”
  5. 【第767期】你不懂JS:混合(淆)“类”的对象
  6. android binder与handler的简要理解
  7. 【早读汇】广州@mogeWCY的《实战ES2015》
  8. 【第769期】2016 JavaScript 发展现状大
  9. 【早读汇】上海@瑞心扉雪《CSS揭秘》笔记
  10. 【第814期】你不懂JS:ES6与未来 语法(下)