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‘页面!"); } @Override //requesCode用于标识对应于哪一个子模块,resultCode用于标识了子模块中哪一个intent携带的数据 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.putString("activitysub", "自‘ActivitySub‘返回"); Intent intent2 = new Intent(); intent2.putExtras(bundle); 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>
需要解释的注释都已给出
时间: 2024-10-25 22:28:23