您的位置:首页 > 其它

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。

三 向下一个活动传递数据

firstactivity

button1.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");
}
});




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: