热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android学习随笔十四(页面跳转与数据传递)

1、activity创建第二个Activity需要在清单文件中为其配置一个activity标签标签中如果带有这个子节点,则会在系统中多创建一个快捷图标
1、activity


  • 创建第二个Activity
  • 需要在清单文件中为其配置一个activity标签
  • 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标





  • 一个应用程序可以在桌面创建多个快捷图标。
  • activity的名称、图标可以和应用程序的名称、图标不相同

android:icon="@drawable/ic_launcher"
android:label="@string/app_name"


xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android&#61;"http://schemas.android.com/apk/res/android"
package
&#61;"com.ecollab.createactivity"
android:versionCode
&#61;"1"
android:versionName
&#61;"1.0" >
<uses-sdk
android:minSdkVersion&#61;"14"
android:targetSdkVersion
&#61;"21" />
<application
android:allowBackup&#61;"true"
android:icon
&#61;"&#64;drawable/ic_launcher"
android:label
&#61;"&#64;string/app_name"
android:theme
&#61;"&#64;style/AppTheme" >
<activity
android:name&#61;".MainActivity"
android:label
&#61;"main"
android:icon
&#61;"&#64;drawable/photo1"
>
<intent-filter>
<action android:name&#61;"android.intent.action.MAIN" />
<category android:name&#61;"android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity
android:name&#61;"com.ecollab.createactivity.SecondAcitivity"
android:label
&#61;"second"
android:icon
&#61;"&#64;drawable/photo2"
>
<intent-filter>
<action android:name&#61;"android.intent.action.MAIN" />
<category android:name&#61;"android.intent.category.LAUNCHER" />
intent-filter>
activity>
application>
manifest>

配置清单文件

2、activity的跳转

Activity的跳转需要创建Intent对象&#xff0c;通过设置intent对象的参数指定要跳转Activity


  •  隐式跳转,通过指定动作实现跳转&#xff0c;称为隐式意图
    • 隐式意图跳转至指定Activity

Intent intent &#61; new Intent();
//启动系统自带的拨号器应用
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);


    • 要让一个Activity可以被隐式启动&#xff0c;需要在清单文件的activity节点中设置intent-filter子节点






    • action 指定动作&#xff08;可以自定义&#xff0c;可以使用系统自带的&#xff09;
    • data 指定数据&#xff08;操作什么内容&#xff09;
    •  category 类别 &#xff08;默认类别&#xff0c;机顶盒&#xff0c;车载电脑&#xff09;
    • 隐式意图启动Activity&#xff0c;需要为intent设置以上三个属性&#xff0c;且值必须与该Activity在清单文件中对三个属性的定义匹配

启动不同应用中的Activity&#xff0c;用隐式

系统会在所有清单文件中寻找与程序员创建的intent匹配的intent-filter&#xff0c;找到则启动&#xff0c;找不到则抛异常
* 匹配就是intent-filter中定义了什么属性&#xff0c;程序员创建的intent中也必须设置什么属性
* 在清单文件的activity标签下&#xff0c;配置intent-filter子节点&#xff0c;其中再配置action和category

//隐式意图,跳转外部应用&#xff1a;如果JAVA代码没有匹配cateroy,系统默认添加category

Intent intent &#61; new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:110"));//tel是在清单文件scheme定义的
startActivity(intent);

//清单文件加权限


  • 显示跳转,通过设置Activity的包名和类名实现跳转&#xff0c;称为显式意图

 


    • 跳转至同一项目下的另一个Activity&#xff0c;直接指定该Activity的字节码即可

 

Intent intent &#61; new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);


    • 跳转至其他应用中的Activity&#xff0c;需要指定该应用的包名和该Activity的类名

 

Intent intent &#61; new Intent();
//启动系统自带的拨号器应用
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);

 

启动同一应用中的Activity&#xff0c;用显式&#xff0c;显式启动效率高于隐式

* 同一应用中&#xff0c;指定目标Activity的字节码和当前的上下文
* 不同应用中&#xff0c;指定目标Activity所在的应用的包名和目标Activity的包名加类名

-------------------------------------------------------------------------

显示调用外部应用

Intent intent &#61; new Intent();
//arg0&#xff1a;目标Activity所在的应用的包名
//arg1&#xff1a;目标Activity的类名&#xff0c;注意要带上包名
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
intent.setData(Uri.parse("tel:11670"));
startActivity(intent);

-------------------------------------------------------------------------

如果系统找到了多个intent-filter与程序员创建的intent匹配&#xff0c;那么就会弹出对话框&#xff0c;列举所有匹配的Activity&#xff0c;让用户选择

 -----------------------------------------------------------------------------------------------------------------------

android:name&#61;"com.ecollab.createactivity.SecondAcitivity"
android:label&#61;"second"
android:icon&#61;"&#64;drawable/photo2"
>












----------------------------------------------------------------------------------------------------

Intent intent &#61; new Intent();
intent.setAction("a.b.c");
//匹配mimetype,此方法要放在setData前面&#xff0c;因为它会清空setData设置的数据,有“android:mimeType”定义&#xff0c;就必须匹配设置
// intent.setType("text/name");
//匹配scheme&#xff0c;它会清空setType设置的数据
// intent.setData(Uri.parse("ecollab:低头思故乡"));
intent.setDataAndType(Uri.parse("ecollab:低头思故乡"), "text/name");
startActivity(intent);

-------------------------------------------------------------------------------------------------------------

3、获取setData封装的数据

//获取启动该ACTIVITY的意图对象
Intent intent &#61; getIntent();
//获取封装在Intent中的数据
Uri uri &#61; intent.getData();

4、显式意图和隐式意图的应用场景

* 显式意图用于启动同一应用中的Activity
* 隐式意图用于启动不同应用中的Activity

*显式意图效率高于隐式意图
* 如果系统中存在多个Activity的intent-filter同时与你的intent匹配&#xff0c;那么系统会显示一个对话框&#xff0c;列出所有匹配的Activity&#xff0c;由用户选择启动哪一个

---

5、显式传递数据

---------------------------------------------------------------------------------------------------------------------------------

EditText et_malename &#61; (EditText) findViewById(R.id.tv_malename);
EditText et_femalename &#61; (EditText) findViewById(R.id.tv_femalename);

String malename &#61; et_malename.getText().toString();
String femalename &#61; et_femalename.getText().toString();

//跳转到secondActivity计算
Intent intent &#61; new Intent(this, SecondActivity.class);
//传递数据,intent中可以封装数据&#xff0c;数据有八大今本数据类型和字符串及其数组&#xff0c;还有实现了序列化接口的对象
//以及bundle对象
//intent.putExtra("malename", malename);
//intent.putExtra("femalename", femalename);

//Bundle中也可以用键值对封装数据&#xff0c;封装类型与Intent一致
Bundle bundle &#61; new Bundle();
bundle.putString("malename", malename);
bundle.putString("femalename", femalename);
intent.putExtras(bundle);
startActivity(intent);

-----------------------------------------------------------------------------------------------------------------------------------

Intent intent &#61; getIntent();
//String malename &#61; intent.getStringExtra("malename");
//String femalename &#61; intent.getStringExtra("femalename");

Bundle bundle &#61; intent.getExtras();
String malename &#61; bundle.getString("malename");
String femalename &#61; bundle.getString("femalename");


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 近来有一个需求,是需要在androidjava基础库中插入一些log信息,完成这个工作需要的前置条件有编译好的android源码具体android源码如何编译,这 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • *resraw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。*resraw和assets的不同点:1.resraw中的文件会 ... [详细]
  • charles3.11.1抓https包
    结论先行:用的是安卓测试机,没加固之前的生产环境的安装包,可以抓到https请求加固之后的包【也就是要上应用市场的包】,抓不到https请求电脑上的操作:1.安装证书【电脑上安装了 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • 在最近的一系列文章,对midipadAPP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因&#x ... [详细]
  • 四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ... [详细]
  • 安卓中的刮刮卡视图,示例原文:https://www.gee ... [详细]
author-avatar
陈上意535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有