1、什么是Intent
Intent可以理解为信使(意图)
由Intent来协助完成Android各个组件之间的通讯,即Android四大组件之间的关联是通过Intent来实现。
2、Intent实现页面之间的跳转
无回传的跳转:直接启动新页面
startActivity(intent)
有返回值的跳转:新页面可以回传信息给旧页面
startActivityForResult(intent,requestCode);
需要注意,这种方式需要关联另外两个方法:
在新页面中,需要使用setResult(resultCode,data)方法,用于回传给旧页面信息
在旧页面中,需要使用onActivityResult(int requestCode,int resultCode,intent data)方法,用于接收新页面回传的信息。
3、startActivity方法实现无返回值的页面跳转
创建初始页面的FActivity.java文件:
package com.example.myintentdemo;
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 FActivity extends Activity{
private Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.factivity);
// 通过点击bt1实现页面之间的跳转:stratActivity方式,需要初始化Intent
bt1=(Button) findViewById(R.id.button1_first);
// 注册点击事件
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 第一个参数,上下文对象,第二个参数,目标文件。在匿名内部类中,无法访问当前类中的对象,
// 需要表明FActivity.this,或者事先声明
// 初始化一个意图
Intent intent =new Intent(FActivity.this, SActivity.class);
// 用Intent这个方法去实现这个意图
startActivity(intent);
}
});
}
}
创建其对应的factivity.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1_first"
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="第一种启动方式" />
<Button
android:id="@+id/button2_second"
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="第二种启动方式" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="吧第二个页面回传的数据显示出来" />
</LinearLayout>
创建待跳转的新页面的SActivity文件:
package com.example.myintentdemo;
import android.app.Activity;
import android.os.Bundle;
public class SActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sactivity);
}
}
创建其对应的sactivity.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
在AndroidManifest.xml文件中对上述两个页面进行注册,并将Factivity.java设置为程序入口:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myintentdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myintentdemo.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.example.myintentdemo.FActivity"
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.myintentdemo.SActivity"
android:label="@string/app_name" >
</activity>
</application>
</manifest>
4、startActivityForResult实现有返回值的页面跳转
修改FActivity.java文件如下:
package com.example.myintentdemo;
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 FActivity extends Activity{
private Button bt1;
private Button bt2;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.factivity);
tv=(TextView) findViewById(R.id.textView1);
// 通过点击bt1实现页面之间的跳转:stratActivity方式,需要初始化Intent
bt1=(Button) findViewById(R.id.button1_first);
bt1=(Button) findViewById(R.id.button2_second);
// 注册点击事件
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 第一个参数,上下文对象,第二个参数,目标文件。在匿名内部类中,无法访问当前类中的对象,
// 需要表明FActivity.this,或者事先声明
Intent intent =new Intent(FActivity.this, SActivity.class);
startActivity(intent);
}
});
bt2.setOnClickListener(new OnClickListener() {
// 通过startActivityForResult方法实现
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent =new Intent(FActivity.this, SActivity.class);
// 第一个参数是intent对象,第二个参数是请求的一个标志
startActivityForResult(intent, 1);
}
});
}
// 通过startActivityForResult跳转,接收返回数据的方法
// requestCode请求的标志
// resultCode第二个页面返回的标志
// data第二个页面回传的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&&resultCode==2){
String content=data.getStringExtra("data");
tv.setText(content);
}
}
}
修改SActivity.java文件如下:
package com.example.myintentdemo;
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 SActivity extends Activity{
private Button bt;
private String content="你好";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sactivity);
// 第二个页面什么时候给第一个页面回传数据,被动式
// 回传到第一个页面实际上是一个Intent对象
bt=(Button) findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View V) {
// TODO Auto-generated method stub
Intent data=new Intent();
data.putExtra("data",content);
setResult(2,data);
// 结束当前页面,销毁,返回第一个页面
finish();
}
});
}
}