intent知识小结
来源:互联网 发布:数据库软件access 编辑:程序博客网 时间:2024/05/01 00:46
一 使用显示intent启动另一个活动
<strong>@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivity(intent);}</strong>
二 使用隐式intent启动另一个活动
通过在filter中的category和action标签来启动活动
<strong>button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.activitytest.ACTION_START");startActivity(intent);}});</strong>tips:1可以通过intent.addCategory方法添加多个category;
2我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指
定当前活动能够响应什么类型的数据。 <data>标签中主要可以配置以下内容。
2.1. android:scheme
用于指定数据的协议部分部分。
2.2. android:host
用于指定数据的主机名部分
用于指定数据的端口部分,一般紧随在主机名之后。
2.4. android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
2.5. android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有<data>标签中指定的内容和Intent中携带的 Data 完全一致时,当前活动才能够响应
该 Intent。
三 向下一个活动传递数据
firstactivity
button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String data = "Hello SecondActivity";Intent intent = new Intent(FirstActivity.this, SecondActivity.class);intent.putExtra("extra_data", data);startActivity(intent);}
</pre><p></p><h1></h1><pre name="code" class="java"><p></p>button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1);}});
public void onClick(View v) {Intent intent = new Intent();intent.putExtra("data_return", "Hello FirstActivity");setResult(RESULT_OK, intent);finish();}
四 返回数据给上一个活动
startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候
能够返回一个结果给上一个活动。毫无疑问,这就是我们所需要的。
startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数
是请求码,用于在之后的回调中判断数据的来源
first的点击事件如下:
<pre name="code" class="java">button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1);}});
参数,第一个参数用于向上一个活动返回处理结果,一般只使用 RESULT_OK 或
RESULT_CANCELED 这两个值,第二个参数则是把带有数据的Intent传递回去, 然后调用
了 finish()方法来销毁当前活动。
startActivityForResult()方法来启动SecondActivity的,在 SecondActivity
被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在FirstActivity中重
写这个方法来得到返回的数据,如下所示:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("data_return");Log.d("FirstActivity", returnedData);}break;default:}}onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动时传
入的请求码。第二个参数 resultCode,即我们在返回数据时传入的处理结果。第三个参数data,
即携带着返回数据的 Intent。
由于在一个活动中有可能调用startActivityForResult()方法去启
动很多不同的活动,每一个活动返回的数据都会回调到 onActivityResult()这个方法中,因此
我 们 首 先 要 做 的 就 是 通过 检 查 requestCode 的值 来 判 断 数 据 来 源 。 确定 数 据 是 从
SecondActivity 返回的之后,我们再通过resultCode的值来判断处理结果是否成功。最后从
data 中取值并打印出来, 这样就完成了向上一个活动返回数据的工作。
在第二个活动通过重写onBackPressed()方法来解决按返回键无法往回传递数值的问题。
@Overridepublic void onBackPressed() {Intent intent = new Intent();intent.putExtra("data_return", "Hello FirstActivity");setResult(RESULT_OK, intent);finish();}
五 启动活动的最佳写法
比如另一个Activity并不是由你开发的,但现在你负责的部分需要有启动
那个Activity 这个功能,而你却不清楚启动这个活动需要传递哪些数据。
那个Activity 这个功能,而你却不清楚启动这个活动需要传递哪些数据。
其实只需要换一种写法,就可以轻松解决掉上面的窘境
public class SecondActivity extends BaseActivity {public static void actionStart(Context context, String data1, String data2) {Intent intent = new Intent(context, SecondActivity.class);intent.putExtra("param1", data1);intent.putExtra("param2", data2);context.startActivity(intent);}……}我们在SecondActivity中添加了一个 actionStart()方法,在这个方法中完成了Intent 的构
建,另外所有 SecondActivity 中需要的数据都是通过 actionStart()方法的参数传递过来的,然
后把它们存储到 Intent 中,最后调用 startActivity()方法启动SecondActivity。
现在只需要一行代码就可以启动 SecondActivity,
如下所示:
button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SecondActivity.actionStart(FirstActivity.this, "data1", "data2");}});
0 0
- intent知识小结
- Intent小结
- Intent小结
- intent小结
- Intent 小结
- Intent知识
- 知识小结
- 知识小结
- android之Intent小结
- intent小结2
- intent小结03
- Intent使用小结
- Intent重点小结
- 【Android归纳】intent小结
- Android Intent 小结
- Intent.使用小结
- Intent 小知识
- Intent知识分类
- 图片压缩小例子
- 140个Google面试问题
- HDOJ 1754 I Hate It (线段树单点更新求区间最大值)
- Visualizing and Understanding Convolutional Networks笔记
- spring 事务管理
- intent知识小结
- Yii2 获取配置信息!
- python笔记---内建函数
- 数据结构---线性表----循环链表和双向链表
- 树莓派操作系统安装链接
- More Effective C++
- 技术揭秘二:探讨12306两地三中心混合云架构
- Android实战技巧:深入解析AsyncTask
- Multiply Strings