Android 学习笔记(10)—— Intent 基本运用

作者:夏至 欢迎转载,也请保留这段申明,谢谢

    最近太忙了,都没什么时间来整理,前9个上传之后格式不对,都没好好整理,以后会抽空整理。

Android的通信桥梁 —— Intent 。

使用一个activity实在是太简单了,布局上也有限,那我们能不能像我们真机上的一样,一点就跳到另一个界面去了。这里我们就使用Intent,在活动中穿梭。至于为什么学着UI组件,突然跑到这个家伙来,那当然是为下一节做准备啦。除了活动,它还可以是服务或者广播。启动可以下列方法:

  • startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity
  • startService(Intent)/bindService(Intent):来启动一个Service
  • sendBroadcast:发送广播到指定BroadcastReceiver

这里,我们就简单地用 Activity 来当例子,毕竟用得最多的就是活动了。

显式Intent与隐式Intent的区别

  • 显式Intent:

    通过组件名指定启动的目标组件,比如startActivity(new

    Intent(A.this,B.class));每次启动的组件只有一个。

  • 隐式Intent:

    不指定组件名,而指定Intent的Action,Data,或Category,当我们启动 组件时,会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件, 当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框

1.1 显示Intent

首先,我们先新建一个布局,就叫做sec_linearlayout好了:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
    <Button
        android:id="@+id/btnBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按键测试"/>
</LinearLayout>

然后,我们再新建一个新activity,名字可以自己取,比如我的取为SencondActivity,让它继承Activity:
```java
public class SecondActivity  extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sec_linearlayout);
    }
}

<div class="se-preview-section-delimiter"></div>

最后,我们在AndroidManifest.xml,把我们新定义的activity包含进去。这里因为不是主activity。所以只要一行就可以了。如下:

接下来就是在主Activity写程序了,由上面的 Intent(A.this,B.class))和startActivity(Intent)就可以了:

setContentView(R.layout.linearlayout);
Button button = (Button)findViewById(R.id.btnInter);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
 startActivity(intent);
    }
});

<div class="se-preview-section-delimiter"></div>

1.2 隐式Intent

传递数据给下一个活动

我们先来看一下AndroidManifest.xml文件中标签

其中上图画圈圈的地方,就是我们隐式Intent最主要的东西了。

  • aciotn : 表示当前可以相应的活动,有且只有一个。
  • category:表示包含的一些附加信息,和相互配合,可以多个。

可以试试这个效果,先体验一下:

这里我们假设一下,比如我们就让第二个activity浏览我们手机默认浏览器,并跳到百度。在事件开发中,我们不可能因为一个事件,而又重新去开发一个浏览器,这不实现,所以,我们可以调用系统的。修改如下:

<activity
android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

<div class="se-preview-section-delimiter"></div>

效果如图:

关于隐式Intent我们就先了解到这,先简单了解就行,后面我们再来深入研究。

1.3 多个活动之间传递数据

在启动活动时传递数据的思路其实很简单,Intent中提供了一系列 putExtra(string name,value)方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了,接收可以用:getStringExtra(string name

putExtra(string name,value):name为上下文键值,第二个为要传递的数据,支持多种类型

所以,主activity这样写:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
    intent.putExtra("data","hello world");
    startActivity(intent);
}

<div class="se-preview-section-delimiter"></div>

第二个活动这样写

这样,我们就完成了想下一个活动传递的功能了,当然了,不一定是字符串,可以是内容,文件数据等其他。

里我们使用了字符串,所以用getSringExtra()来接收,如果是整型,则用 getIntExtra(),如果是boolean 型,则用 getBooleanExtra(),以此类推。

返回数据给上一个活动

既然可以传数据给下一个活动,那么肯定能传递数据给上一个活动了。不过这里我们不再用startActivity(),而是用startActivityForResult()来启动活动。该方法接收两个参数,第一个还是Intent ,第二个是请求码。直接看代码:主activity:

button.setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View v) {
    // Intent(A.this,B.class));
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
    startActivityForResult(intent,1);
    }
});

由于我们使用startActivityForResult()来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因为我们需要在MainActivity中重写这个方法来获取数据。

这样,当第二个活动被销毁的时候,就能返回数据到onActivityResult()来,我们就能获数据了。

Intent 就暂时怎么多了,深入我们在进阶在来讲解。

不得不吐槽一下CSDN的图片粘贴的问题,每次都上传真心蛋疼,有谁支个招吗。。。。

时间: 2024-10-03 22:54:04

Android 学习笔记(10)—— Intent 基本运用的相关文章

Android学习笔记-Activity&Intent

界面activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="matc

Android学习笔记之Intent(1)

1.Intent指定启动目标组件 2.Intentfilter描述基本组件所在地址 3.其他包引入资源文件时记得引入R所在的包 package com.jikexueyuan.intent; import com.jiahemeikang.helloandroid.R; import android.app.Activity; import android.os.Bundle; public class Aty2 extends Activity{ public Aty2() { // TODO

Android学习笔记之Intent

Intent中文意思:意图 Intent是各组件沟通的桥梁,在Android中非常的重要 Inten可以启动的大致分为三种:Activity(界面),Service(服务),Broadcasts(广播) 启动界面:StartActivity(),StartActivityForResult(); 启动服务:StartService(),BindService() 发送广播:SendBroadcasts() Intent分为显式意图和隐式意图两种 显式意图:需要明确指明打开的组件 隐式意图:没有明

android学习笔记(4)Intent初级学习

对应若水老师的视频教程第7课 这节课程讲解了intent,是对动作的抽象描述,是意图的意思,建立一个intent就可以给一个动作给他来执行.inten是android开发的精髓所在. 一,点击按钮实现给一个指定号码打电话 btn1.setOnClickListener(listener); private OnClickListener listener =new OnClickListener() { Intent intent = new Intent(); @Override public

Android:日常学习笔记(10)———使用LitePal操作数据库

Android:日常学习笔记(10)---使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表.増删改查的操作.并且LitePal很"轻",jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别.目前LitePal的源码已经托管到了GitHub上. 关

Pro Android学习笔记(十二):了解Intent(下)

解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键就是component 名字,在<intent-fliter>中声明的其他属性被忽略.对于implicit intent,则根据action,category和data来进行匹配.然而一个intent fliter中可以声明多个actions,多个categories,多个data属性,因此可以满

Pro Android学习笔记(十):了解Intent(上)

Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBaiscViewActivity.在AndroidManife

Android学习笔记(三五):再谈Intent(下)-一些实践

Android的UI框架要求用户将他们的app分为activity,通过itent来进行调度,其中有一个main activity由Android的launcher在桌面中调用.例如一个日历的应用,需要查看日历的activity,查看单个事件的activity,编辑事件的activity等等.在查看日历的activity中,如果用户选择的某个事件,需要通过查看事件的activity来处理.这就是最近本的app UI框架,本次,我们将学习如何通过intent来完成. Activity之间的关系 某

Android学习笔记(三四):再谈Intent(上)-一些知识

在Android学习笔记(七):多个Activity和Intent中,我们先在学会了如何使用intent在代码中唤起activity.此处作深一步地学习. 什么是Intent intent是对一个操作处理的抽象描述.context可以在使用startActivity(intent)来launch一个actvivity,就如我们在学习笔记(七)中的处理,也是最常用的方式,将activity在我们的应用中整合:可以在通过sentBroast(intent)来广播给任何有兴趣的BroadcastRec

【转】Pro Android学习笔记(十):了解Intent(上)

目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBa