intent知识小结
2016-03-23 15:34
225 查看
一 使用显示intent启动另一个活动
<strong>@Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); }</strong>
二 使用隐式intent启动另一个活动
通过在filter中的category和action标签来启动活动<strong>button1.setOnClickListener(new OnClickListener() { @Override public 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。
三 向下一个活动传递数据
firstactivitybutton1.setOnClickListener(new OnClickListener() { @Override public 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() { @Override public 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="ja 4000 va">button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1); } });
setResult()方法接收两个
参数,第一个参数用于向上一个活动返回处理结果,一般只使用
RESULT_OK 或
RESULT_CANCELED 这两个值,第二个参数则是把带有数据的Intent
传递回去, 然后调用
了 finish()方法来销毁当前活动。
startActivityForResult()方法来启动SecondActivity
的,在 SecondActivity
被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在FirstActivity
中重
写这个方法来得到返回的数据,如下所示:
@Override protected 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()方法来解决按返回键无法往回传递数值的问题。
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
五 启动活动的最佳写法
比如另一个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() { @Override public void onClick(View v) { SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); } });
相关文章推荐
- return,continue,break的用法与区别
- 90后创业代表张裕平即将出席2016中国IT领袖峰会
- Beyond Compare乱码问题详解
- Visualizing and Understanding Convolutional Networks笔记
- 读《世界是数字的》有感
- python笔记---内建函数
- Android实战技巧:深入解析AsyncTask
- 树莓派操作系统安装链接
- 2016.3 网易笔试 '9'和'g'看不清,输出所有情况
- php扩展开发3--扩展类传参数
- HDU1011 Starship Troopers(树形dp)
- 图片压缩小例子
- 140个Google面试问题
- 项目图片
- linux--文件--系统文件和目录 /dev
- 传统的Dialog对话框
- PAT 1014 Waiting in Line (30)
- 234. Palindrome Linked List(链表模板)
- mysql字符函数简析
- 最全的资源教程-前端涉及的所有知识体系