概述

Android开发少不了的就是页面之间的跳转,或者想要呼叫打开其他应用等

Intent

Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的运作,还可以在不同组件之间传递数据。

显示Intent启动

第一个参数为启动活动的上下文

第二个参数为想要启动的目标活动

Intent intent = new Intent(MainActivity.this, TabHostActivity.class);
startActivity(intent);

通过这个构造函数就可以构建出Intent的“意图”,且目标明确,所以为显示启动

隐式Intent启动

根据 <intent-filter> 中设定的 action 和 category 来启动,且只有<action>和<category>中的内容同时能够匹配上时,这个活动才能响应。

Intent intent = new Intent("com.zqunyan.zgstudy.ACTION_START");
intent.addCategory("com.zqunyan.zgstudy.MY_CATEGORY");
startActivity(intent);

如果 <intent-filter> 中的 category 值是 android.intent.category.DEFAULT 则可以省略addCategory(),因为DEFAULT是一种默认的 category,在调用 startActivity() 方法的时候会自动添加到 intent 中,即

Intent intent = new Intent("com.zqunyan.zgstudy.ACTION_START");
startActivity(intent);

启动其他程序

使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动。

网页浏览

action指定为Intent.ACTION_VIEW,其常量值为 android.intent.action.VIEW

然后将网页地址转换成 Uri 对象传递进去

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.baidu.com"));
startActivity(intent);

拨号界面

action指定为 Intent.ACTION_DIAL

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

根据包名打开软件

借助androdi内部的 PackageManager 来根据包名取得应用的启动页面

Intent intent = getPackageManager().getLaunchIntentForPackage("com.zqunyan.zgwidget");
if(intent != null){intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);
}

根据类名打开界面

常用于打开系统设置界面,用于一些快捷功能设置。借助 Component 来实现

如:下面实例打开华为手机的设置页面

Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.android.settings", "com.android.settings.Settings$DisplaySettingsActivity");
intent.setComponent(componentName);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

startActivityForResult

主页面

  • 跳转按钮点击事件

    Intent intent = new Intent(MainActivity.this, ReturnValueActivity.class);
    //第二个参数用于处理返回结果是判断是哪个语句调用的
    startActivityForResult(intent, 1); //requestCode = 1
    
  • 处理返回结果

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){super.onActivityResult(requestCode, resultCode, intent);if(requestCode == 1){if(resultCode == 1){String content = intent.getStringExtra("content");lblStatus.setText("success");}else{lblStatus.setText("fail");}}
    }
    

跳转界面

跳转界面传回返回值,并关闭界面

  1. 实例化一个空的 Intent
  2. 绑定数据到 Intent
  3. setResult() 回传结果值和绑定了数据的 Intent
  4. 关闭自身,主画面接收返回结果
Intent intent = new Intent();
intent.putExtra("content", txtMessage.getText().toString());
//setResult第一个参数为结果码,常用的有Activity.RESULT_OK、RESULT_CANCELED或者自定义整数型结果码
// 第二个参数为返回值,返回值封装在Intent中
setResult(1, intent);
finish();

页面传值

Intent.putExtra 传值

传值

intent.putExtra("uname", "admin");

取值

Intent intent = getIntent();
String name = intent.getStringExtra("uname")

借助 Bundle 传值

用于在 Activity 之间传送值或数组资料,好处是当一个页面跳转多个页面时,可以共用bundle。

简单值

打包

Bundle bundle = new Bundle();
bundle.putString("NAME", "QY");
bundle.putInt("AGE", 18);
bundle.putDouble("TALL", 175.86);
bundle.putStringArrayList("lstFilePaths", lstFilePaths);
intent.putExtras(bundle);

收包

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
String strName = bundle.getString("NAME");
int intAge = bundle.getInt("AGE");
ArrayList<String> lstFilePaths = bundle.getStringArrayList("lstFilePaths");

StringArrayList

正常传值都为单个实际值,如果想要传送列表数据则一般通过构造函数或参数传递,直接通过 bundle 只能传送 StringArrayList 简单列表类型

自定义数据类

首先将自定义的数据类序列化,即继承 implements Serializable 接口

数据类

public class GoodsInfoModule implements Serializable {}

传值

bundle.putSerializable("goodsInfo", goodsInfo);

取值

goodsInfo = (GoodsInfoModule) bundle.getSerializable("goodsInfo");

Activity活动页面跳转与Android页面传值相关推荐

  1. 问题解决10使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器--解决方案如下:...

    问题描述: 使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器,例如: 当登录信息过期时,点击左边的菜单栏会让登录页面显示在右边的框架中,而不能铺满整个浏览器 解决方案: ...

  2. 子页面跳转到父页面指定地方

    在iframe子页面跳转到父页面指定的地方:οnclick="javascript:window.parent.document.getElementById('sscId').focus( ...

  3. java页面跳转t赋值_java servlet 几种页面跳转的方法及传值

    java web 页面之间传值有一下这几种方式 1.form 表单传递参数 2.url地址栏传递参数 3.session 4.cookie 5.application 6.通过隐藏域传值 7.通过Ja ...

  4. 页面跳转传参,A 页面跳转到B页面,把A页面获取的值传到B页面

    1.问题: 最近遇到一个问题,在A页面跳转到B页面时,同时将一个值带到B页面并显示出来. 最后找到一个比较靠谱的方法,分享给大家~ 2.解决: 页面其他内容不再展示,只写A,B两个页面的JS代码段,有 ...

  5. uni-app以及微信小程序页面跳转后实现页面自动刷新

    uni-app以及微信小程序页面跳转后实现页面自动刷新 在程序中需要从一个switch TAb页面跳转到另一个switch Tab页面,但是页面跳转之后,发现添转后的页面不会执行onload里面的刷新 ...

  6. java web实现页面跳转页面_JavaWeb过滤器实现页面跳转至登录页面

    需求说明: 1.用户登录某页面一段时间之内,如果无任何操作,跳转至登录页面. 2.用户在非登录状态下,无法访问项目下的某些页面. 解决方式: 通过session过滤器实现对请求的过滤,如果未登录跳转至 ...

  7. asp登录页面跳转到注册页面_Java 添加页面跳转按钮到PDF文档

    概述 当我们在查阅含有大量页面的PDF时,可通过在页面上添加跳转按钮来实现页面转换,以达到节约时间,提高效率的目的.本文将通过Java程序来演示如何给PDF文档添加页面跳转按钮.通常来说跳转可分为两种 ...

  8. 注册页面跳转登入页面无法正常显示返回的是页面名称的字符串,而不是页面

    由注册页面填写完信息,点击注册提交后,数据库正常添加用户(完成注册),也能够通过手动login地址,进入登入. 但就是无法自动跳转到login页面,而在页面返回的是login字符串,如图: 出现上面问 ...

  9. session在html页面跳转,session跨页面传值为空

    PHP中的SESSION页面间传值的问题 a.php 代码 @session_start(); $_SESSION['username']=$row['username']a.php 代码 跳转 b. ...

最新文章

  1. 说出来你可能不信,现在酒厂都在招算法工程师
  2. 如何让文本框中只能输入手机号码
  3. 阿里团队高效沟通的秘密,全在这5点!
  4. java有链表吗_Java数据结构之链表(Linked List)
  5. (转)浅析CSS——元素重叠及position定位的z-index顺序
  6. 2019春季学期第四周作业
  7. 腾讯云 Centos 配置 JDK Tomcat Mysql
  8. PAT乙类1013 数素数 (20 分)
  9. Orion:谷歌的新一代SDN控制器
  10. oracle EXP-00028
  11. Java Web学习总结(12)——使用Session防止表单重复提交
  12. 在NPP运行Python报错:SyntaxError: Non-ASCII character '\xe5' in file的解决方法
  13. 在linux缓存里写数据,缓存策略
  14. 2017-12-24 手机编程环境初尝试-用AIDE开发Android应用...
  15. kali Linux 系统安装教程
  16. uva10098--排列
  17. 世预赛乌拉圭VS哥伦比亚最新赛事解析:客场保平属性强怎么下单
  18. mysql数据库如何查看表空间_MYSQL:查看的数据库表空间
  19. Xshell键盘数字键不能用怎么办?
  20. 动态规划-试题(1)-扔玻璃珠

热门文章

  1. SqlServer数据库DROP TABLE IF EXISTS语句
  2. 入门到精通,阿里架构师撰写的两份MySQL技术宝典,已经超神
  3. Python全栈开发1
  4. IDEA彻底删除一个项目
  5. NEO改进协议提案4(NEP-4)
  6. 做wish用多大的虚拟服务器,Wish卖家看过来,这几个平台“潜规则”你必须知道!...
  7. Photoshop插件-锐化-高反差保留-脚本开发-PS插件
  8. 适合夜猫子吃的七类食物
  9. 分布式理论之体系结构
  10. 第 21 章 路面裂缝检测识别系统设计--matlab深度学习实战