public class
Intent
extends Objectimplements Parcelable Cloneable
类概述
意图是要执行的操作的抽象描述。(比如, 中午肚子饿了,你想吃午饭了 "想吃午饭" 就是一个意图 , 会触发你"去吃饭"这个动作 )
它可以用来与startActivity
开展活动
,broadcastIntent
将它传送给任何有兴趣的BroadcastReceiver
组件,和StartService(意向)
或bindService(意向书,ServiceConnection,int)的
沟通与背景服务
。
一个Intent提供了一个设施之间在不同的应用程序中的代码执行后期运行时绑定。其最重要的用途是在开展的活动,它可以被看作活动之间的胶水。它基本上是一个被动的数据结构要执行的操作的抽象描述。
Intent 意图 ,除了启动相应的活动之外,还可以传递相应的数据 ,
比如如下情形 :
Activity A ---> ActivityB
(1 ) B 需要用到A的某些数据
(2 ) A 需要得到B的返回数据 才能执行某些功能
1. Main.java (Activity A )
public class Main extends Activity {
private Button btn_main;
private static final int REQUEST_CODE = 1;//标示符 用于判断是否为需求的键值对
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_main = (Button)findViewById(R.id.btn_main);
btn_main.setOnClickListener(listener);
}
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(Main.this, Second.class);
intent.putExtra("str", "我来自Main Activity");//存放用于传递的键值对
startActivityForResult(intent,REQUEST_CODE);
}
};
// 重写onActivityResult方法用于接收 回调的intent返回值
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE && resultCode == Second.RESULT_CODE)//判断回调的键值对
{
String str = data.getExtras().getString("back");
Toast.makeText(Main.this, str, Toast.LENGTH_SHORT).show();//弹窗 用于显示键值对
}
}
}
Second.java (Activity B)
public class Second extends Activity {
private Button btn_second;
private TextView text ;
public static final int RESULT_CODE = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();//得到上个Activity传递的Intent();
String str = intent.getExtras().getString("str");// 得到Intent 传递过来的键值对
text = (TextView)findViewById(R.id.text);
text.setText(str);
btn_second = (Button)findViewById(R.id.btn_second);
btn_second.setOnClickListener(listener);
}
private OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("back", "我是来自Second的返回值");
setResult(RESULT_CODE,intent);// 传递返回值给 Activity A
finish();//销毁Second Activity
}
};
}
activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
tools:context=".Main" />
<Button
android:id="@+id/btn_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="MAIN"
/>
</LinearLayout>
activity_second.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/btn_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="SECOND"
/>
</LinearLayout>
AndroidManifest.xml<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cjq.intent.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Main"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Second"
android:label="Second"
android:theme="@android:style/Theme.Dialog"/> // 设置Activity的主题
</application>
</manifest>
==========================================================
实际上 是Intent 携带 Key-Value 跨Activity, 通过startActivityForResult() 启用,用onActivityResult接收 在新的活动页面通过setResult()方法,回传intent以及标示符!