首页 > 系统 > Android > 正文

[Android新手学习笔记05]-如何进行活动Activity之间的跳转以及数据传递

2019-11-09 16:12:25
字体:
来源:转载
供稿:网友

一、Activity之间跳转

1.显示Intent

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivity(intent);

FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动,通过startActivity()方法来执行这个Intent。

2.隐式Intent

1.配置Activity

<activity android:name=".SecondActivity">
           <intent-filter>                <action android:name="top.xiexiaodong.activity.ACTION_START" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter> </activity>

2.代码跳转

Intent intent = new Intent("top.xiexiaodong.activity.ACTION_START");
startActivity(intent);

同时匹配<action>和<category>才能响应,android.intent.category.DEFAULT是一种默认的<category>,在调用startActivity()方法的时候会自动将这个<category>添加到Intent中。如果需要添加别的<category>,可以通过下面代码实现:

intent.addCategory("top.xiexiaodong.category.MY_CATEGORY");

这里必须在AndroidManifest文件中添加这个<category>,代码如下:

<activity android:name=".SecondActivity">
           <intent-filter>                <action android:name="top.xiexiaodong.activity.ACTION_START" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="top.xiexiaodong.category.MY_CATEGORY" />            </intent-filter></activity>

否则会报错:

No Activity found to handle Intent

3.更多隐式Intent用法

1.打开浏览器

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.xiexiaodong.top"));startActivity(intent);

2.打开拨号

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));startActivity(intent);

可以配置AndroidMainfest文件,通过<data>标签,更精确地指定当前Activity能够响应什么类型的数据。<data>标签中主要可以配置以下内容:

android:scheme。用于指定数据的协议部分,如上例中的http部分。

android:host。用于指定数据的主机名部分,如上例中的www.xiexiaodong.top部分。

android:port。用于指定数据的端口部分,一般紧随在主机名后面。

android:path。用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。

android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。

只用<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent。可以配置如下内容,使其能够响应所有http协议的Intent,代码如下:

<activity android:name=".SecondActivity">
           <intent-filter>                <action android:name="top.xiexiaodong.activity.ACTION_START" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="top.xiexiaodong.category.MY_CATEGORY" />                <data android:scheme="http" />            </intent-filter></activity>

二、Activity之间传数据

1.向下一个Activity传数据

1.发送

String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);intent.putExtra("extra_data", data);startActivity(intent);

2.接收

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");Log.d("SecondActivity", data);

2.返回数据给上一个Activity

1.startActivityForResult

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1); // 1是唯一值即可

2.setResult

Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");setResult(RESULT_OK, intent); // 把带有参数的intent传回去finish();一般使用RESUTL_OK,RESULT_CANCEL这两个值。

3.重写OnActivityResult()方法

@Override
PRotected void onActivityResult(int requestCode, int resultCode, Intent data) {        switch (requestCode) {            case 1:                if (resultCode == RESULT_OK) {                    String returnData = data.getStringExtra("data_return");                    Log.d("FirstActivity", returnData);                }                break;            default:                break;        }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表