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);}});




setResult()方法接收两个
参数,第一个参数用于向上一个活动返回处理结果,一般只使用 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 这个功能,而你却不清楚启动这个活动需要传递哪些数据。
其实只需要换一种写法,就可以轻松解决掉上面的窘境

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