Activity活动页面跳转与Android页面传值
概述
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");}} }
跳转界面
跳转界面传回返回值,并关闭界面
- 实例化一个空的 Intent
- 绑定数据到 Intent
- setResult() 回传结果值和绑定了数据的 Intent
- 关闭自身,主画面接收返回结果
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页面传值相关推荐
- 问题解决10使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器--解决方案如下:...
问题描述: 使用带有框架的页面跳转到登录页面时,登录页面只显示在子框架中,未能铺满整个浏览器,例如: 当登录信息过期时,点击左边的菜单栏会让登录页面显示在右边的框架中,而不能铺满整个浏览器 解决方案: ...
- 子页面跳转到父页面指定地方
在iframe子页面跳转到父页面指定的地方:οnclick="javascript:window.parent.document.getElementById('sscId').focus( ...
- java页面跳转t赋值_java servlet 几种页面跳转的方法及传值
java web 页面之间传值有一下这几种方式 1.form 表单传递参数 2.url地址栏传递参数 3.session 4.cookie 5.application 6.通过隐藏域传值 7.通过Ja ...
- 页面跳转传参,A 页面跳转到B页面,把A页面获取的值传到B页面
1.问题: 最近遇到一个问题,在A页面跳转到B页面时,同时将一个值带到B页面并显示出来. 最后找到一个比较靠谱的方法,分享给大家~ 2.解决: 页面其他内容不再展示,只写A,B两个页面的JS代码段,有 ...
- uni-app以及微信小程序页面跳转后实现页面自动刷新
uni-app以及微信小程序页面跳转后实现页面自动刷新 在程序中需要从一个switch TAb页面跳转到另一个switch Tab页面,但是页面跳转之后,发现添转后的页面不会执行onload里面的刷新 ...
- java web实现页面跳转页面_JavaWeb过滤器实现页面跳转至登录页面
需求说明: 1.用户登录某页面一段时间之内,如果无任何操作,跳转至登录页面. 2.用户在非登录状态下,无法访问项目下的某些页面. 解决方式: 通过session过滤器实现对请求的过滤,如果未登录跳转至 ...
- asp登录页面跳转到注册页面_Java 添加页面跳转按钮到PDF文档
概述 当我们在查阅含有大量页面的PDF时,可通过在页面上添加跳转按钮来实现页面转换,以达到节约时间,提高效率的目的.本文将通过Java程序来演示如何给PDF文档添加页面跳转按钮.通常来说跳转可分为两种 ...
- 注册页面跳转登入页面无法正常显示返回的是页面名称的字符串,而不是页面
由注册页面填写完信息,点击注册提交后,数据库正常添加用户(完成注册),也能够通过手动login地址,进入登入. 但就是无法自动跳转到login页面,而在页面返回的是login字符串,如图: 出现上面问 ...
- session在html页面跳转,session跨页面传值为空
PHP中的SESSION页面间传值的问题 a.php 代码 @session_start(); $_SESSION['username']=$row['username']a.php 代码 跳转 b. ...
最新文章
- 说出来你可能不信,现在酒厂都在招算法工程师
- 如何让文本框中只能输入手机号码
- 阿里团队高效沟通的秘密,全在这5点!
- java有链表吗_Java数据结构之链表(Linked List)
- (转)浅析CSS——元素重叠及position定位的z-index顺序
- 2019春季学期第四周作业
- 腾讯云 Centos 配置 JDK Tomcat Mysql
- PAT乙类1013 数素数 (20 分)
- Orion:谷歌的新一代SDN控制器
- oracle EXP-00028
- Java Web学习总结(12)——使用Session防止表单重复提交
- 在NPP运行Python报错:SyntaxError: Non-ASCII character '\xe5' in file的解决方法
- 在linux缓存里写数据,缓存策略
- 2017-12-24 手机编程环境初尝试-用AIDE开发Android应用...
- kali Linux 系统安装教程
- uva10098--排列
- 世预赛乌拉圭VS哥伦比亚最新赛事解析:客场保平属性强怎么下单
- mysql数据库如何查看表空间_MYSQL:查看的数据库表空间
- Xshell键盘数字键不能用怎么办?
- 动态规划-试题(1)-扔玻璃珠