博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android:使用 Intent 连接多个活动
阅读量:6801 次
发布时间:2019-06-26

本文共 4398 字,大约阅读时间需要 14 分钟。

Intent是Android各组件之间进行交互的一种重要方式,一般被用于启动活动、启动服务以及发送广播等场景。

显式Intent:

Intent有多个构造函数重载,其中一个Intent(Context packageContext,Class cls)。第一个参数要求提供一个启动活动的上下文,第二个参数是指向想要启动的目标活动。创建好Intent后,用**startActivity()**方法启动即可。

如下,在 MainActivity 中的一个按钮的点击后,启动 first_activity

public void onClick(View v) {     Intent intent = new Intent(MainActivity.this,first_activity.class);     startActivity(intent);}复制代码

隐式 Intent:

隐式 Intent不像显式那样明确指出要启动哪一个活动,而是指定一系列更为抽象的actioncategory等信息,只有当actioncategory信息完全匹配时才能成功启动。

首先在AndroidManifest.xml中的 ****标签下配置 ****内容,如下:

复制代码

其中 标签中指明活动可以响应com.lodge.myapplication.ACTION_START 。然后在另一个 activity中按钮的点击事件添加如下代码:

button_2.setOnClickListener(new View.OnClickListener() {     @Override     public void onClick(View v) {         Intent intent = new Intent("com.lodge.myapplication.ACTION_START");     //隐式Intent;         startActivity(intent);     }});复制代码

这里的 intent是另一个构造函数,直接将action的字符串传了进去,表示想要启动能够响应com.lodge.myapplication.ACTION_START这个 action的活动。另外,因为category参数设置为android.intent.category.DEFAULT ,代表默认设置,所以在intent中未加入category。 其实每个intent中只能指定一个action,但却能指定多个category。例如:

button_2.setOnClickListener(new View.OnClickListener() {     @Override     public void onClick(View v) {        Intent intent = new Intent("com.lodge.myapplication.ACTION_START");     //隐式Intent;        intent.addCategory("com.lodge.myapplication.MY_CATEGORY");        startActivity(intent);     }});复制代码

当然,在AndroidManifest.xml中****标签下的 ****里也要添加 内容,如下:

复制代码

更多隐式intent:

使用隐式intent启动其他程序的活动。例如打开系统浏览器,在按钮点击事件中添加如下代码:

button_3.setOnClickListener(new View.OnClickListener() {       @Override       public void onClick(View v) {           Intent intent = new Intent(Intent.ACTION_VIEW);             //更多隐式Intent;           intent.setData(Uri.parse("http://www.baidu.com"));           startActivity(intent);       }});复制代码

这里的Intent.ACTION_VIEW是内置动作。

向下一个活动传递数据:

Intent中的putExtra()方法可以把我们想要传递的数据保存在Intent中,启动另一个活动后,再把数据从Intent中取出即可。

//上一个活动传送数据;button.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {          String data = "hello intent put_Extra";          Intent intent = new Intent(MainActivity.this,first_activity.class);          intent.putExtra("extra_data",data);     //传递数据,第一个参数是键值,后一个参数是要传递的数据;         startActivity(intent);     }}); //下一个活动获取数据;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_first);     Intent intent = getIntent();        //获取用于启动本activity的intent;    String data = intent.getStringExtra("extra_data");      //传入相应键值,获得数据;    Log.d("first_activity",data);       //打印数据;}复制代码

返回数据给上一个活动:

Activity中有一个**startActivityForResult()**方法也是用于启动活动的,但是这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。

//启动活动;button.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {          Intent intent = new Intent(MainActivity.this,second_activity.class);          startActivityForResult(intent,1);    //接收启动的下一个活动返回的数据,第二个参数是请求码,只要是唯一值就行,这里是 1 ;      }}); @Override//重写onActivityResult()方法,用于响应startActivityForResult()方法启动的活动;protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {    switch (requestCode)    {        case 1:           if(resultCode == RESULT_OK)           {                String returnedData = data.getStringExtra("return_data");                Log.d("main_activity",returnedData);           }           break;    }}  //子活动设置按钮销毁活动(return_button) ;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);   setContentView(R.layout.activity_second);    Button button = findViewById(R.id.return_button);    button.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent intent = new Intent();            intent.putExtra("return_data","hello main_activity!");            setResult(RESULT_OK,intent);            finish();       //销毁当前活动;        }    });}  @Override//重写按下返回键的方法,实现与 return_button 相同的功能;public void onBackPressed() {    Intent intent = new Intent();    intent.putExtra("return_data","hello back to main_activity!");    setResult(RESULT_OK,intent)    finish();       //销毁当前活动;}复制代码

转载于:https://juejin.im/post/5cda72bee51d453b557dc37a

你可能感兴趣的文章
CCNP路由实验---4、配置EIGRP不等价均衡
查看>>
Fedora20下安装vim
查看>>
CentOS 6.5 使用docker 容器
查看>>
pl/sql中的exception
查看>>
Android开发:通过AdbWireless,不用数据线连接到安卓手机进行调试
查看>>
Spring Security系列1:一个最基础的入门实例
查看>>
组策略对应于注册表位置汇总
查看>>
Java虚拟机参数配置
查看>>
RHCE 学习笔记(31) - 防火墙 (中)
查看>>
巧用UWA资源检测,轻松剔除冗余资源!
查看>>
XSS研究4-来自外部的XSS攻击的防范
查看>>
Spring知识点总结-1
查看>>
微软私有云分享(R2)21 BMC提升B格
查看>>
MDSF:如何使用GMF来做TOGAF建模工具
查看>>
Spring Security简介
查看>>
打造一流的研发中心
查看>>
MCollective架构篇3-Puppet插件的部署及测试
查看>>
配置GNS使用CRT连接
查看>>
Java:集合类性能分析
查看>>
《简约至上:交互设计四策略》导读
查看>>