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

本文共 4426 字,大约阅读时间需要 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/5cdbc679e51d456e396319a9

你可能感兴趣的文章
在redhat server 6 安装gcc-4.5.2
查看>>
我的友情链接
查看>>
自定义View Client 登录方式(一)
查看>>
cenOS+nginx+php+mysql (非一键包安装)
查看>>
我的友情链接
查看>>
我来自CSDN
查看>>
在mysql表中插入大量测试数据
查看>>
怎么给电脑设置IP地址和DNS地址,各系统设置IP/DNS几种方法
查看>>
面试总结之 oop desing 之 The Strategy Pattern
查看>>
必 备 习 题 集 (一)
查看>>
windows下批量部署简易脚本
查看>>
python爬虫入门—统计豆瓣电影评论词频
查看>>
【LoadRunner技术讲座4】利用sitescope监测监控mysql
查看>>
转:模态对话框的支持 (IE,Firefox,Chrome)
查看>>
Jenkins+QTP自动化测试框架
查看>>
《Node.js In Action》笔记之流程控制
查看>>
3518EV200 SDK学习1
查看>>
1163: 零起点学算法70——Yes,I can!
查看>>
2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解
查看>>
关于图片或者文件在数据库的存储方式归纳
查看>>