Android页面跳转(Intent)

Android 意图的使用(Intent)

  • 显式四种跳转方式
    • 布局+代码
    • 效果
  • 隐式意图和隐式意图的跳转
  • Intent概述
  • Action属性
  • Data属性
  • Category属性
    • 按home键时启动自己做的应用
  • Component属性
  • Extra属性(重点)
    • Bundle
    • 传递序列化对象
  • Type属性
  • Flag属性
  • 返回值

显式四种跳转方式

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

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

        Intent intent = new Intent();ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);intent.setComponent(componentName);startActivity(intent);

 startActivity(new Intent(MainActivity.this,HomeActivity.class));

布局+代码

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:gravity="center"><Buttonandroid:id="@+id/bt_intentmain"android:layout_width="wrap_content"android:layout_height="40dp"android:text="跳过去"/><Buttonandroid:id="@+id/bt_intentOne"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮一"/><Buttonandroid:id="@+id/bt_intentTwo"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮二"/><Buttonandroid:id="@+id/bt_intentThree"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮三"/></LinearLayout>

代码

import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private  Button mBtIntent,mBtIntentOne,mBtIntentTwo,mBtIntentThree;@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.d("TAG","onCreate");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mBtIntent.setOnClickListener(this);mBtIntentOne.setOnClickListener(this);mBtIntentTwo.setOnClickListener(this);mBtIntentThree.setOnClickListener(this);setTitle("页面A");}private  void initView(){mBtIntent = findViewById(R.id.bt_intentmain);mBtIntentOne = findViewById(R.id.bt_intentOne);mBtIntentTwo = findViewById(R.id.bt_intentTwo);mBtIntentThree = findViewById(R.id.bt_intentThree);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt_intentmain:IntentOne();break;case R.id.bt_intentOne:IntentTwo();break;case R.id.bt_intentTwo:IntentThree();break;case R.id.bt_intentThree:IntentFour();break;default:break;}}private  void IntentOne(){Intent intent = new Intent(MainActivity.this,HomeActivity.class);startActivity(intent);}private  void IntentTwo(){Intent intent = new Intent();intent.setClass(MainActivity.this,HomeActivity.class);startActivity(intent);}private  void IntentThree(){Intent intent = new Intent();ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);intent.setComponent(componentName);startActivity(intent);}private  void IntentFour(){startActivity(new Intent(MainActivity.this,HomeActivity.class));}
}

效果

在这里插入图片描述

隐式意图和隐式意图的跳转

隐式意图
没有明确指定组件名的Intent为隐式意图,系统会根据隐式意图中设置的动作(action)、类别(category)、数据UIL等来匹配最合适的组件。

首先在清单文件中使用意图过滤器设置活动的名字
< action android:name=“HomeActivity” />
< category android:name=“android.intent.category.DEFAULT” />

        <activityandroid:name=".HomeActivity"android:launchMode="singleInstance" ><intent-filter><action android:name="HomeActivity" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

跳转

        Intent intent = new Intent();intent.setAction("HomeActivity");startActivity(intent);

Intent概述

Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。

Intent由动作、数据、分类、类型、组件、扩展信息、标记等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。

在这里插入图片描述

Action属性

• Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)等。
• 通常与Data一般匹配使用
在这里插入图片描述
例如 短信发送
一、
Uri uri= Uri.parse(“tel:10086”);
Intent intent= new Intent(Intent.ACTION_CALL, uri);
//intent.setData(uri));//设置数据
startActivity(intent);
二、
Manifest里需要添加CALL_PHONE权限

三、
危险权限需要动态申请。

Data属性

Action和Data一般匹配使用,不同的Action由不同的Data数据指定
在这里插入图片描述
在这里插入图片描述

Category属性

• Category属性指明一个执行Action的分类
• Intent中定义了一系列Category属性常量
在这里插入图片描述

按home键时启动自己做的应用

      <intent-filter><category android:name="android.intent.category.HOME"/><category android:name="android.intent.category.DEFAULT"/><action android:name="android.intent.action.MAIN"/></intent-filter>

Component属性

一、Component属性用于指明Intent的目标组件的类名称。
二、通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。
三、根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:
显式Intent,这种方式通过直接指定组件名称Component来实现;

Intent intent = new Intent();
ComponentName name = new ComponentName(IntentActivity.this,MainActivity.class);
intent.setComponent(name);
startActivity(intent);

**隐式Intent,**这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。

Intent intent = new Intent();
intent.setClassName(IntentActivity.this,"com.ugrow.day02.MainActivity");

显式Intent通过**setComponent()、setClassName()或setClass()**设置组件名

Intent intent = new Intent();
intent.setClass(IntentActivity.this,MainActivity.class);

Extra属性(重点)

通过使用Intent对象的putExtra()方法来添加附加信息、和信息传递
信息添加 方式类似于键值对

Intent intent= new Intent();
intent.putExtra("name","zhangsan");

信息取出 另一个页面
通过使用Intent对象的getXXXExtra()方法可以获取附加信息。
例如,将上面代码存入Intent对象中的人名获取出来,
因存入的是字符串,所以可以使用getStringExtra()方法获取数据

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

Bundle

打包 当一个页面的数据会向多个页面传递的时候并且不是每个页面都会用到这些数据
比如A页面传到B页面 B页面不需要用数据 但需要将数据传递给C页面
进行多次使用 如果数据过多那么将会导致每一个页面都有大量的get方法 页面不整洁
因此使用Bundle打包

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("user",user.getText().toString());
bundle.putString("pwd",pwd.getText().toString());
intent.putExtras(bundle);

Bundle extras = getIntent().getExtras();
String user = extras.getString("user");
String pwd = extras.getString("pwd");

传递序列化对象

Javabean对象序列化后可以直接使用Extra方法传递对象

一、Javabean对象需要实现Serializable接口

CommentBean implements Serializable

二、传数据

intent.putExtra("bean",commentBean);

三、取数据

 CommentBean commentBean = new CommentBean();Intent intent=getIntent();commentBean = (CommentBean) intent.getSerializableExtra("bean");

Type属性

Intent intent = new Intent();
Uri uri = Uri.parse("file:///data/vivo.mp4");
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"video/*");
startActivity(intent);

Flag属性

Flag属性用来设定Activity的启动模式,与清单文件中的设置launchMode属性值相同

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Intent.FLAG_ACTIVITY_CLEAR_TOP = singleTask
Intent.FLAG_ACTIVITY_SINGLE_TOP = singleTop
Intent.FLAG_ACTIVITY_NEW_TASK = singleInstance

返回值

一、A页面传值给B页面
startActivity() (putExtra,Bundle)
二、B页面传值给A页面
startActivityForRestult()
setResult(resultCode,Intent)
onActivityResult

A页面跳转B页面 如果转账成功则返回过江 失败则返回有鬼

页面A

    Intent intent = new Intent(MainActivity.this,HomeActivity.class);intent.putExtra("money","转账100元");//有返回值的跳转/** 第一个参数Intent对象* 第二个参数 RequestCode*/startActivityForResult(intent,REQUSET_CODE);
    @Override//第一个参数 是不是我要的返回结果  第二个参数 是谁返回给我的 第三个参数 返回的附加信息protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == REQUSET_CODE && resultCode == HomeActivity.RESULT_CODE){String msg = data.getStringExtra("msg");Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();}}

页面B

Intent intent = new Intent();Intent getIn = getIntent();String money = getIn.getStringExtra("money");if(TextUtils.isEmpty(money)){intent.putExtra("msg","有鬼!");}else{intent.putExtra("msg","过江!");}setResult(RESULT_CODE,intent);//关闭页面finish();

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66888.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓——Intent(实现页面跳转的两种方法)

下图中两个不同的方法就是两种页面之间跳转的情况 1>跳转不返回数据 2>跳转返回数据 实例&#xff1a; 第一种启动方式&#xff08;跳转不返回数据&#xff09; 第二种启动方式&#xff08;跳转返回数据&#xff09; 先看第一种&#xff1a; 点击第一种启动方式按钮…

【安卓开发】安卓页面跳转

目录 一、如何添加一个页面&#xff08;activity&#xff09;二、如何实现页面的跳转二、页面跳转传参1. 方式一2. 方式二安卓线程实现页面跳转安卓创建一个线程 三、Activity&#xff08;页面)的生命周期 一、如何添加一个页面&#xff08;activity&#xff09; 1. 右键 src …

安卓app之页面跳转

手动跳转 1.打开eclipse&#xff0c;New一个安卓工程 后面一直next&#xff0c;知道出现以下界面说明项目创建成功 2.添加第二个页面 一直next&#xff0c;直到出现以下界面 修改 Activity Name &#xff0c;点击Finish&#xff0c;页面添加成功 点击 AndroidManifest.xml 可…

大咖说·对话开源|与Tapdata论道数据技术开放生态

一个良好的开源生态具有哪些特征&#xff1f;开源与商业一定是对立的吗&#xff1f;开源产品应该如何做好商业化&#xff1f; 一个良好的开源生态具有哪些特征&#xff1f;开源与商业一定是对立的吗&#xff1f;开源产品应该如何做好商业化&#xff1f;本期大咖说&#xff0c;阿…

中奖名单公布

阅读本文大概需要 1.8 分钟。 头条今天的推送是恰饭文章&#xff0c;但确实觉得很不错&#xff0c;觉得靠谱才会推荐&#xff0c;感兴趣的可以参与下&#xff0c;反正免费的&#xff0c;不感兴趣忽略就好。 那个&#xff0c;先说声不好意思&#xff0c;五月份的收租抽奖我一直以…

纪录篇 之 我收集整理的一些网址(不断更新 ing)

LZ-Says&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。 前言 起初&#xff0c;不知道写博文是为了什么。 现在&#xff0c;点滴记录&#xff0c;为了更好的明天。 未来&#xff0c;只是为了证明这个世界我来过。 写这篇文章的前提&#xff0c;或者说诱发因素如下…

三金叉见底

三金叉见底 三金叉买入&#xff0c;三死叉止损 技术指标作为一种参考工具&#xff0c;在不同人的眼里会有不同的研判结 果。投资者不应该单以一项指标的讯号而对行情作出绝对的判断&#xff0c;因 为指标所起的只是一种辅助的作用而不是绝对的作用。如果采用多种 指标可以增加…

程序员的人生规划

展望未来&#xff0c;总结过去10年的程序员生涯&#xff0c;给程序员小弟弟小妹妹们的一些总结性忠告。 走过的路&#xff0c;回忆起来是那么曲折&#xff0c;把自己的一些心得体会分享给程序员兄弟姐妹们&#xff0c;虽然时代在变化&#xff0c;但是很可能你也会走我已经做…

第四周周赛——三金三银两铜+签到

A——HDU 5974 A Simple Math Problem <-题目链接 签到题 Given two positive integers a and b,find suitable X and Y to meet the conditions:XYaLeast Common Multiple (X, Y) bInput Input includes multiple sets of test data.Each test data occupies one lin…

工作十年的程序员,却拿着毕业三年的工资……

工作十年的程序员&#xff0c;却拿着毕业三年的工资…… 导语&#xff1a;小韩是一家小公司的软件程序员&#xff0c;而十年后他还在那家公司&#xff0c;依然是一名普通的程序员。算起来&#xff0c;他工作也有十多年了&#xff0c;但是&#xff0c;他却告诉我&#xff0c;他…

孙杨事件的几点事实!

阅读本文大概需要 3.3 分钟。 昨天一个最爆炸的消息&#xff0c;莫过于孙杨被国际体育仲裁法庭禁赛 8 年的判决。 毫无疑问&#xff0c;孙杨是继姚明、刘翔时代之后&#xff0c;在国际体坛影响力最大&#xff0c;人气最高的一位中国体育名将了&#xff0c;所以&#xff0c;无数…

AI领域最有影响力100人,Hinton只排31、Bengio竟然没有上榜?

2021-01-22 00:42:54 作者 | 耳洞打三金 大家好我是三金&#xff0c;今天又是开开心心的一天&#xff0c;如题目和上图所示&#xff0c;我今天在上班摸鱼的时候发现了这样一份号称是“AI领域最有影响力的100人”的榜单。 这可把我给吓了一跳 &#xff0c;我赶紧把这个榜单从头…

谷歌最新提出无需卷积、注意力,纯MLP构成的视觉架构!网友:MLP is All You Need?

2021-05-06 15:50:28 作者 | 耳洞打三金、琰琰 近日&#xff0c;谷歌大脑团队新出了一篇论文&#xff0c;题目为《MLP-Mixer: An all-MLP Architecture for Vision 》&#xff0c;这篇论文是原视觉Transformer&#xff08;ViT&#xff09;团队的一个纯MLP架构的尝试。 本文总…

抖音快速涨粉之抖音用户数据分析

抖音是一款专注于新生代的音乐创意短视频App&#xff0c;提供给年轻人群。截至2020年10月&#xff0c;抖音国内日活跃用户数突破2亿&#xff0c;国内月活跃用户数突破6亿。足迹遍布全世界233个国家和地区&#xff0c;已然成为短视频行业的巨头&#xff0c;行业内有南抖音北快手…

竞品分析—抖音PK快手

1、交互设计方面&#xff1a;进入抖音时&#xff0c;便直接观看视频&#xff0c;抖音通过“向上滑”动作完成视频切换&#xff0c;操作十分流畅&#xff0c;将用户的观赏体验放大到极致。反观快手则通过封面页组成的瀑布流&#xff0c;用户通过浏览找到自己感兴趣的视频进入&am…

怎么让抖音快速涨粉之抖音数据分析

怎么让抖音快速涨粉之抖音数据分析 2020年年初的疫情&#xff0c;让大量门店商家意识到&#xff0c;一味注重发展线下生意&#xff0c;遇到突发事件时抗风险能力将会很差&#xff0c;所以在疫情缓和后&#xff0c;有不少企业都开始注意发展线上的经营渠道&#xff0c;如抖音、快…

抖音用户数据获取分析(未完成)

基于大牛的研究成果&#xff08;https://blog.csdn.net/wql2014302721/article/details/110563695&#xff09;&#xff0c;使用Fiddler在安卓9手机上抓包&#xff0c;添加用户证书&#xff0c;抓不到包&#xff0c;将手机ROOT后&#xff0c;添加系统“信任的凭据”&#xff0c…

抖音短视频APP——市场需求文档

本文站在抖音初创期的角度&#xff0c;去尝试写的一份MRD&#xff08;市场需求文档&#xff09;&#xff0c;主要内容包括&#xff1a;市场概述、用户分析、竞品分析&#xff08;抖音VS快手&#xff09;、需求描述。本文是个人在入门产品经理阶段&#xff0c;思考并撰写的一份不…

分享个短视频竞品分析报告

作者&#xff1a;carmanzzz &#xff08;转载已取得作者授权&#xff09; 产品体验环境&#xff1a;Android 9 产品版本&#xff1a; 版本信息 1. 报告目的及主要内容 1.1 报告目的 为了使报告内容更为聚焦&#xff0c;撰写任何报告前都应该首先明确报告的研究目的&#xff0c;…

抖音商品机会潜力分析报告竞赛-3等奖作品分析

文章目录 数据集介绍需要1以及结论需求2以及结论推荐开发商品A&#xff1a;鹊牌 三合一爆米花球形焦糖味奶香味100g玉米50g糖 50克油 包邮推荐开发商品B&#xff1a;【云南松茸菌汤包】熬汤必备 正宗云南产地货 60g/袋 包邮推荐开发商品C&#xff1a;推荐_【三只松鼠_巨型零食大…