Android 学习笔记(10)—— Intent 基本运用
来源:互联网 发布:依爱消防主机设备编程 编辑:程序博客网 时间:2024/05/16 07:59
作者:夏至 欢迎转载,也请保留这段申明,谢谢
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的图片粘贴的问题,每次都上传真心蛋疼,有谁支个招吗。。。。
- Android 学习笔记(10)—— Intent 基本运用
- Android学习笔记--intent的运用(一)
- 【Android学习笔记】Intent的基本作用
- Android学习笔记----Intent基本用法
- android学习笔记——Intent
- android学习笔记——intent
- android学习笔记1——Intent
- Android学习笔记——Intent
- Pro Android学习笔记(三)——Intent
- Android学习笔记10---Intent
- android学习笔记——Intent的解析(Intent的隐式调用)
- Android学习笔记--Intent
- android学习笔记---Intent
- Android学习笔记 - Intent
- Android学习笔记3——学习intent
- Android学习笔记(四)Activiy学习——Intent,context
- Android学习笔记(06)——Android中的Intent
- android学习笔记——解析Activity、Intent、Service
- C++第二次上机作业
- 1021_二叉树的复制和左右子树交换
- 安装DirectX SDK时出现Error Code:s1023 的解决方案
- android 代码判断设备是平板or手机
- (OK) 编译libiconv-1.14(静态库)—CentOS 7— android-ndk
- Android 学习笔记(10)—— Intent 基本运用
- 2款XSHELL配色方案及导入配色方案的方法
- 理论: 图论(14):最大强连通图算法 tarjan
- Android 界面方向设置
- 查询数据库sql执行的频率,以便设计出更好的数据库
- HDOJ 1269 迷宫城堡
- (OK) 编译xerces-c-3.1.2(动态库)—CentOS 7— android-ndk
- 合同的重要性
- C++ assert()的使用方法