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

一、Activity之间跳转

1.显示Intent

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

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

2.隐式Intent

1.配置Activity

 
 
  1. <activity android:name=".SecondActivity">
  2.            <intent-filter>
  3.                <action android:name="top.xiexiaodong.activity.ACTION_START" />
  4.                <category android:name="android.intent.category.DEFAULT" />
  5.            </intent-filter>
  6. </activity>

2.代码跳转

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

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

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

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

 
 
  1. <activity android:name=".SecondActivity">
  2.            <intent-filter>
  3.                <action android:name="top.xiexiaodong.activity.ACTION_START" />
  4.                <category android:name="android.intent.category.DEFAULT" />
  5.                <category android:name="top.xiexiaodong.category.MY_CATEGORY" />
  6.            </intent-filter>
  7. </activity>

否则会报错:

 
 
  1. No Activity found to handle Intent

3.更多隐式Intent用法

1.打开浏览器

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


2.打开拨号

 
 
  1. Intent intent = new Intent(Intent.ACTION_DIAL);
  2. intent.setData(Uri.parse("tel:10086"));
  3. 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,代码如下:

 
 
  1. <activity android:name=".SecondActivity">
  2.            <intent-filter>
  3.                <action android:name="top.xiexiaodong.activity.ACTION_START" />
  4.                <category android:name="android.intent.category.DEFAULT" />
  5.                <category android:name="top.xiexiaodong.category.MY_CATEGORY" />
  6.                <data android:scheme="http" />
  7.            </intent-filter>
  8. </activity>


二、Activity之间传数据

1.向下一个Activity传数据

1.发送

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

2.接收

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

2.返回数据给上一个Activity

1.startActivityForResult

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

2.setResult

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

3.重写OnActivityResult()方法

  
  
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3.        switch (requestCode) {
  4.            case 1:
  5.                if (resultCode == RESULT_OK) {
  6.                    String returnData = data.getStringExtra("data_return");
  7.                    Log.d("FirstActivity", returnData);
  8.                }
  9.                break;
  10.            default:
  11.                break;
  12.        }
  13. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值