Android 实现活动跳转,Android开发---Intent的简单介绍以及活动跳转传递信息

在使用郭霖大神的《第一行代码》学习安卓开发后对Intent的一些小笔记。

Intent组件 在安卓开发中相似于信使,但有彻底不是的一种组件。它是链接四大组件的重要组成部分。

一、Intent的概念:java

Android中提供了Intent组件来辅助应用间的信息传递,它也可用于应用程序内部的activity,service和broadcast receiver之间的交互。android

Intent是一种运行时绑定(runtime

binding)机制,它能在程序运行的过程当中链接两个不一样的组件。经过Intent,你的程序能够向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。web

二、Intent的两种使用方式显示Intent和隐式Intentide

首先是显示Intentsvg

在一个活动的按钮点击事件中

增长学习

Intent intent =new Intent (当前活动.this,要启动的活动.class);

StartActivity(intent);

好比在First的活动中启动second活动能够这么写网站

Intent intent =new Intent (First.this,second.class);

StartActivity(intent);

这种方法不须要在AndroidManifest.xml中额外添加代码this

接下来是手机应用比较多的隐式Intent

提到隐式Intent以前简单说一下Intent的启动过程

647ae832e3700686f7661b049caa452f.png

所谓的隐式启动就是不指明启动那个活动,而是从全部活动中筛选出符合条件的活动。若是有多个活动会提示选择一个活动。那么筛选的过程就如上图所示(灵魂做图手。。→_→)

首先在AndroidManifest.xml你要启动的活动中添加spa

Action 后引号的内容为当前活动的名字能够随意命名。

标签则附加了一些信息,精确指明当前活动可以响应Intent的可能还有cate。

注意只有当Action和category的内容等同时匹配,Intent指定的ACtion和category时,活动才能响应Intent 换句话来讲就是才能启动。

关于按钮事件的代码须要加入code

Intent intent =new Intent(“com.example.activitytest.ACTION_START/*你在name中的名字*/”);

上述第三行,每一个Intent只能指定一个action可是却能指定多个category。

因此在此增长一个category,在依次关联的活动的按钮点击事件中增长

intent.addCategory("com.example.activitytest.MY_CATEGORY");

.

.

3.更多的隐式Intent用法以下

Intent intent=new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.bilibili.com"));

startActivity(intent);

在按钮中增长这些 不须要在XML中注册,直接就能够打开网站。

setData() 他主要接受一个Uri对象,主要用于指定正在操做的数据。而后经过字符串的形式传到Uri.parse()方法中解析。

上述代码就是经过点击事件打开bilibili。

4.Intent对不一样组件发送消息的不一样机制

使用Context.startActivity() 或 Activity.startActivityForResult(),传入一个intent来启动一个activity。

使用 Activity.setResult(),传入一个intent来从activity中返回结果。

将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service。

将intent对象传给 Context.bindService()来绑定一个service。

将intent对象传给 Context.sendBroadcast()。

Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等广播方法,则它们被传给 broadcast receiver。

5.Intent的相关属性

component(组件):目的组件

action(动做):用来表现意图的行动

category(类别):用来表现动做的类别

data(数据):表示与动做要操纵的数据

type(数据类型):对于data范例的描写

extras(扩展信息):扩展信息

Flags(标志位):指望这个意图的运行模式

6.使用Intent传递数据

1、向下一个活动传递数据

在当前活动中首先定义传递的数据,而后使用Intent方法进行传递数据。

这里使用显示传递

Intent intent=new Intent(SecondActivity.this,ForthActivity.class);

//括号内的形式为(当前活动.this,传递给的活动.class);

intent.putExtra("extra_data",data);

//这里调用intent的putExtra()方法,括号内的内容是(你传递数据的名称,数据)

startActivity(intent);

//启动传递目标的活动。

而后在传递的目标活动中须要

Intent intent=getIntent();//此项主要用于启动上一个活动的Intent

String data1=intent.getStringExtra("extra_data");//取出数据,什么类型就用对应的方法此处是String 就用getStringExtra,若是是整型就用getIntExtra,括号内为传递数据的名称。

Log.d("SecondActivity",data1);//打印数据

2、返回数据给上一个活动

首先在第一个活动的按钮点击事件中

Intent intent=new Intent(firstActivity.this,secondActivity.class);//经过显式Intent启动第二个活动。

startActivityForResult(intent,1);//第一个参数是要打开的活动,第二个参数是请求码,用于在回调的过程当中判断数据来源。

在第二个活动的按钮事件中有

(经过点击按钮返回数据,并关闭当前窗口)

Intent intent=new Intent();

intent.putExtra("return_data","hello firstActivity");

setResult(RESULT_OK,intent);

finish();

此处的intent仅仅只是用于传递数据,没有“意图”。

SetResult(),接受的两个参数分别是,第一个用于处理上一个活动返回处理结果,第二个参数则是返回数据。

在第一个活动中接受数据的代码为

首先须要重写onActivityResult方法。

这个方法的三个参数分别是:启动活动时候的请求代码,返回数据时传入的处理结果,带着返回数据的Intent。注意第二个是处理事后的结果不是数据自己。

第一个参数主要是判断数据来源肯定是目标活动传来的数据

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch(requestCode)

{

case 1:

if(resultCode==RESULT_OK) {

String returnData = data.getStringExtra("return_data");

//名称必定要对应

Log.d("firstActivity",returnData);

break;

}

default:

}

}

也能够不用点击按钮事件来返回数据。

在第二个活动中重写onBackPressed();方法

@Override

public void onBackPressed() {

Intent intent =new Intent();

intent.putExtra("return_data","Hello firstActivity");

setResult(RESULT_OK,intent);

finish();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值