官方文档介绍:Intents and Intent Filters
1. Intent可以理解为信使(意图),由Intent来协助完成Android各个组件之间的通讯。
第一种方式直接跳转,第二种方式有返回值,第二种方法还需要onActivityResult来让A页面接收B页面回传的数据,setResult来实现B页面将数据通过这个函数回传给A页面。
2. startActivity无返回结果的页面跳转:
第一步:在src中新创建两个class类,分别命名为aPage,bPage。
第二步:让这两个类继承Activity。
第三步:给这两个类创建onCreate方法。
第四步:为这aPage创建布局Android XML File叫做alayout,并通过setContentView绑定到aPage中。第二个页面也同样对应的设置。
第五步:给alayout放置设置几个控件。
第六步:去AndroidManifest.xml中去注册这两个Activity。其中<intent-filter>属性表示该Activity首先启动。
<activity第七步:接下来对aPage页面中的按钮进行初始化,使之能够实现Activity的跳转。
android:name="com.example.tenseven.aPage"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.tenseven.bPage"
android:label="@string/app_name" >
</activity>
aPage.java源代码:
package com.example.tenseven;bPage.java源代码:
import javax.security.auth.PrivateCredentialPermission;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class aPage extends Activity{
private Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alayout);
/*
* 通过点击bt1实现页面跳转。
* 1.startActivity的方式实现跳转。
* 1.1初始化Intent,先使用Intent(Context packageContext,Class<?>...)的这个方法。
* 1.2通过startActivity来实现跳转。
* */
bt1 = (Button) findViewById(R.id.button1_first);
// 注册点击事件
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 第一个参数是上下文对象this,代表当前的Activity aPage,因为在方法内部现在通过this无法直接访问,因此要加上类名。
// 第二个参数目标文件。
Intent intent = new Intent(aPage.this, bPage.class);
startActivity(intent);
}
});
}
}
package com.example.tenseven;
import android.app.Activity;
import android.os.Bundle;
public class bPage extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.blayout);
}
}
3. startActivityForResult有返回结果的页面跳转:
先上代码:
aPage.java源代码:
package com.example.tenseven;
import javax.security.auth.PrivateCredentialPermission;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class aPage extends Activity{
private Button bt1;
private Button bt2;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alayout);
/*
* 通过startActivityForResult的方式实现跳转
*
* */
tv = (TextView) findViewById(R.id.textView1);
bt2 = (Button) findViewById(R.id.button2_second);
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(aPage.this, bPage.class);
// 第一个参数是Intent对象
// 第二个参数是请求的一个标识。
startActivityForResult(intent, 1); // 请求码是1
}
});
}
/*
* 通过startActivityForResult跳转,请求返回数据的方法。
* requestCode代表请求的一个标识,也就是根据不同的标识接收返回的不同数据。
* resultCode代表第二个页面返回的标识,就比如说某个按钮跳转到了十个页面,那么就需要这个参数来标识是哪个页面的数据。
* data代表第二个页面回传的数据。
* */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == 2){ // 注意这两个,请求码是1,返回码是2.
String content = data.getStringExtra("data"); // 这个data也是一个标识。请求叫data的Intent发来的数据。
tv.setText(content);
}
}
}
bPage.java源代码:
package com.example.tenseven;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class bPage extends Activity{
private Button bt;
private String content = "你好";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blayout);
/*
* 第二个页面什么时候给第一个页面回传数据。
* 回传第一个页面实际上是一个Intent对象。
* */
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//
Intent data = new Intent();
data.putExtra("data", content);
setResult(2, data); //返回码为2, 设置一个叫data的Intent的数据,与content相关联。
// 结束当前页面。
finish();
}
});
}
}
我居然还发现了一种利用Intent跳转的方式:
首先在AndroidManifest.xml文件中有两个Activity,分别都用了<intent-filter>属性,还各自设置了name。其中第一个Activity的类别是Launcher,第二个类别是默认类型Default。也就是根据它们的name属性进行跳转。
然后在第一个Activity的java文件中,通过这样设置点击响应来达到页面的跳转:
很神奇吧!