当前位置: 代码迷 >> Android >> Android 学习笔记(十)—— Intent 基本运用
  详细解决方案

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

热度:418   发布时间:2016-04-24 11:23:41.0
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:```javapublic class SecondActivity  extends AppCompatActivity {@Overrideprotected 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浏览我们手机默认浏览器,并跳到百度。在事件开发中,我们不可能因为一个事件,而又重新去开发一个浏览器,这不实现,所以,我们可以调用系统的。修改如下:

<activityandroid: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的图片粘贴的问题,每次都上传真心蛋疼,有谁支个招吗。。。。

  相关解决方案