记android学习之路----Activity(4)----Activity之间的跳转与数据传递

来源:互联网 发布:莎莎源码的解压密码 编辑:程序博客网 时间:2024/05/20 06:09

Activity的跳转和数据传递

Activity跳转的类型

activity之间的跳转有两种情况:
   1:无参跳转:Activity之间跳转的时候并不传递数据;
   2:含参跳转:Activiy在跳转的过程中同时传递数据;
接下来,具体看一下各种情况:

无参跳转

无参跳转只是通过activity去启动另一个activity,但是并不会携带参数!

1:通过显式的intent跳转

ActivityA:
核心代码:

  Intent intent = new Intent(ActivityA.this,ActivityB.class);  startActivity(intent);

具体代码:
ActivityA:
ActivityA.java:

package com.example.lk.myactivityceshi;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ActivityA extends Activity {    Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_a);        button = (Button) findViewById(R.id.buttona);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(ActivityA.this,ActivityB.class);                startActivity(intent);            }        });    }}

activity_a.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.lk.myactivityceshi.ActivityA">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textAppearance="?android:attr/textAppearanceLarge"        android:text="ActivityA页面"        android:textSize="75dp"        android:id="@+id/textView"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="63dp"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="跳转至ActivityB"        android:textSize="50dp"        android:id="@+id/buttona"        android:layout_marginBottom="63dp"        android:layout_alignParentBottom="true"        android:layout_alignParentStart="true"/></RelativeLayout>

ActivityB.java:

package com.example.lk.myactivityceshi;import android.app.Activity;import android.os.Bundle;/** * Created by Administrator on 2016/11/21 0021. */public class ActivityB extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_b);    }}

activity_b.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.lk.myactivityceshi.ActivityA">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textAppearance="?android:attr/textAppearanceLarge"        android:text="ActivityB页面"        android:textSize="75dp"        android:id="@+id/textView"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="63dp"/></RelativeLayout>

2:通过隐式的intetn跳转—仅仅限制action

核心代码:

Intent intent = new Intent("and.intent.action.MY_ACTION");startActivity(intent);

注:在本次跳转中只限制了要跳转的目标Activity的action;只要符合该action的activi都会响应!

实例
代码:和上面的代码一致,仅仅是ActivityA需要做修改:

package com.example.lk.myactivityceshi;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ActivityA extends Activity {    Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_a);        button = (Button) findViewById(R.id.buttona);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //在此处要修改                Intent intent = new Intent("android.intent.action.MY_ACTION");                startActivity(intent);            }        });    }}

AndroidManifest.xml:

        <activity android:name=".ActivityB">            <intent-filter>                //在此处自定义action                <action android:name="android.intent.action.MY_ACTION"/>                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter>        </activity>

3:通过隐式inent跳转—限制action和category

核心代码:

Intent intent = new Intent("and.intent.action.MY_ACTION");intent.addCtegory("and.intent.category.MY_CATEGORY");startActivity(intent);

注:在本次跳转中设置了两个跳转条件,两个条件都满足的activit就会响应本次跳转!
如果category被设置为default.则同样不用设置addCategory();

具体实例:
AndroidManifest.xml:

        <activity android:name=".ActivityB">            <intent-filter>                //在此处自定义action                <action android:name="android.intent.action.MY_ACTION"/>                <category android:name="android.intent.category.DEFAULT"/>                <category android:name="android.intent.category.ABC"/>            </intent-filter>        </activity>

ActivityA.java

            public void onClick(View v) {                Intent intent = new Intent("android.intent.action.MY_ACTION");                intent.addCategory("android.intent.category.ABC");                startActivity(intent);            }

4:通过隐式intent跳转—-传入参数

核心代码:

Intetn intent = new Intent("and.intent.action.MY_ACTION");intent.addCategory("and.intent.category.MY_CATEGORY");intent.setData(Uri.parse("http://www.baidu.com"));startActivity();

注:1在本次跳转中设置了两个跳转条件,并且向目标activity中传入了uri参数,在第二节Activity的注册中讲了一个activity是可以设置他能够响应的uri类型的;
2 在目标activity中,我们设置其and:scheme=”http”,则该activity在满足action/category匹配的情况下,也要求传入的uri参数是http请求,其才能响应!
但是注意;我们设置这个activity可以响应http请求,但是这个activity并不能加载web页面,仅做测试用!
实例:加载web页面/拨打电话;

实例:
加载一个web页面:

#############

转向拨号页面:

拨号页面

5:含参跳转:

在这种情况下,两个activity的切换会为彼此传入参数;

1:A–>B:将数据传入B页面,但是不用接收B页面的数据;

  A:的核心代码:
        Intent intenta = Intent(ActivityA.this,ActivityB.class);        String aimData = "来自A页面的数据";        intent.putExtra("data",aimData);        startActivity(intenta);
  B:的核心代码:
        //获取A页面传过来的数据        Intent intentb = this.getIntent();        String rcvData = intentb.getStringExtra("data");

2:A–>B:由A去启动B,并向B传入数据,同时接收由B返回的数据

  A:的核心代码:
        Intent intenta = Intent(ActivityA.this,ActivityB.class);        String aimData = "来自A页面的数据";        intent.putExtra("data",aimData);        startActivityForResult(intenta,cource_ok);            //接收数据        public void onActivityResult(int request_code,int result_code,Intent data){            switch(request_code){                case 1:                if(result_code == result_ok){                    String resultString = data.getStringExtra("data_return");                    Log.i("returnData",resultString);                }            }        }
  B:的核心代码:
        //获取A页面传过来的数据        Intent intentb = this.getIntent();        String rcvData = intentb.getStringExtra("data");

   B向A页面返回数据:

        Intent intentc = new Intent();        String returnData = "来自B页面返回的数据";        intentc.putExtra("data_return",returnData);        setResult(result_ok,intentc);        finish();

注:

    //在ActivityB中如果不是点下按钮返回A,而是按下返回键,则可拦截返回按钮的点击事件:        public void onBackPressed(){                Intent intentc = new Intent();                String returnData = "来自B页面返回的数据";                intentc.putExtra("data_return",returnData);                setResult(result_ok,intentc);                finish();        }
0 0