Intent可以理解为“意图的抽象”,负责对应用中操作的动作、动作涉及数据及附加数据进行描述。一个Intent对象其实就是信息的捆绑,使用Intent可在多个Activity之间传递数据,充当信使,它有2个重要属性action和data,有2个常用的方法putExtra()---存储数据、getXXXExtra()---取出数据(XXX为存储的数据类型),举个例子,使用Intent在2个Activity之间传递信息,话不多说,先上图
第一个Activity程序ActivityMain.java
public class ActivityMain extends Activity {
/** Called when the activity is first created. */
static final int REQUEST_CODE = 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//创建Intent对象,参数分别为上下文,要跳转的Activity类
Intent intent1 = new Intent(ActivityMain.this, ActivitySub.class);
intent1.putExtra("activitymain", "从'ActivityMain'进入");//放入需要传递的数据(键值对)
//启动intent1对象,实现跳转。如果REQUEST_CODE>=0,就会调用onActivityResult()
startActivityForResult(intent1, REQUEST_CODE);
}
});
setTitle("首次进入'ActivityMain'页面!");//setTitle()设置标题栏显示的内容
}
@Override
//requesCode用于标识对应于哪一个子模块,resultCode用于标识了子模块中哪一个intent携带的数据
//自ActivitySub返回时调用此方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_CANCELED)
setTitle("取消");
else if (resultCode == RESULT_OK) {
String temp=null;
//不需要声明新的Intent对象,直接用data就可以,这里的data是AcitivitySub传递过来的
//保存临时状态信息的方法有SharedPreferences对象和Bundle对象
Bundle extras = data.getExtras();
if (extras != null) {
temp = extras.getString("activitysub");
}
setTitle("现在是在ActivityMain里:"+temp);
}
}
}
}
启动Activity的2种方式startActivityForResult()与startActivity()的不同之处在于:
1、startActivity( )
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从ActivityMain跳转到下一个ActivitySub,而当这个ActivitySub调用了finish()方法以后,程序会自动跳转回ActivityMain,并调用前一个ActivityMain中的onActivityResult( )方法。
第二个Activity程序ActivitySub.java
public class ActivitySub extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subactivity);
Button button1 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Bundle bundle = new Bundle();//新建一个Bundle类(key-value对)
//putString()作用是向键值为“activity”中放入字符串数据“自...”
bundle.putString("activitysub", "自'ActivitySub'返回");
Intent intent2 = new Intent();
intent2.putExtras(bundle);//将该bundle加入intent2对象
setResult(RESULT_OK, intent2);//RESULT_OK用于标识此intent2
finish();
}
});
String data=null;
//getIntent将该项目中包含的原始intent检索出来,将检索出来的intent赋值给一个Intent类型的变量
//getExtras()得到被赋值的变量所附带的额外数据
Bundle extras = getIntent().getExtras();//获得全部数据
if (extras != null) {
//getString()返回指定key的值
data = extras.getString("activitymain");
}
setTitle("现在是在'ActivitySub'里: "+data);
}
}
布局文件中main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="进入ActivitySub" /> </LinearLayout>
subactivity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="返回ActivityMain" /> </LinearLayout>
转载于:https://blog.51cto.com/macxiao/1577230