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();
}
本文详细介绍了Android中Activity的两种跳转方式——无参跳转与含参跳转,包括显式Intent与隐式Intent的应用场景及实现方法,并提供了具体的代码示例。
195

被折叠的 条评论
为什么被折叠?



