首页 > 代码库 > startActivityForResul完整详解示例

startActivityForResul完整详解示例

MainActivity如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package cc.vv;  
  2. import android.os.Bundle;  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. /** 
  9.  * Demo描述: 
  10.  * startActivityForResul使用示例 
  11.  *  
  12.  * 利用startActivityForResult跳转到其余Activity 
  13.  * 当第二个Activity关闭时将数据返回给第一个Activity 
  14.  * 在第二个Activity调用finish()或者按下Back键的时候回传数据 
  15.  *  
  16.  */  
  17. public class MainActivity extends Activity {  
  18.     private Button mButton;  
  19.     private int requestCode_test=9527;  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         mButton = (Button) findViewById(R.id.button);  
  24.         mButton.setOnClickListener(new ButtonOnClickListener());  
  25.     }  
  26.   
  27.       
  28.     /** 
  29.      * 利用startActivityForResult()的方式打开一个新的Activity 
  30.      *  
  31.      * 注意:startActivityForResult(intent,requestCode)方法的参数 
  32.      * requestCode表示本次startActivityForResult()操作的请求码 
  33.      * 因为在同一个Activity中根据业务的不同,可能需要在多处 
  34.      * 调用startActivityForResult()方法.所以为了区分每次 
  35.      * startActivityForResult()的操作为其设置一个requestCode 
  36.      */  
  37.     private class ButtonOnClickListener implements OnClickListener {  
  38.         public void onClick(View v) {  
  39.             Intent intent = new Intent();  
  40.             intent.setClass(getApplicationContext(), AnotherActivity.class);  
  41.             startActivityForResult(intent, requestCode_test);  
  42.         }  
  43.     }  
  44.       
  45.     /** 
  46.      * 利用onActivityResult()处理新Activity关闭时的回传数据 
  47.      *  
  48.      * 注意:onActivityResult(int requestCode,int resultCode,Intent data)方法的参数 
  49.      * 1 requestCode如上描述,区分了不同的startActivityForResult()调用 
  50.      * 2 resultCode表示新Activity中处理结果的状态. 
  51.      *   比如某项操作是否成功,是否有异常等 
  52.      * 3 data新Activity回传的数据 
  53.      */  
  54.     @Override  
  55.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  56.         super.onActivityResult(requestCode, resultCode, data);  
  57.         if (requestCode==requestCode_test) {  
  58.             if (resultCode==RESULT_OK) {  
  59.                 System.out.println("requestCode="+requestCode+",resultCode="+resultCode);  
  60.                 String name = data.getStringExtra("name");  
  61.                 int age = data.getIntExtra("age", 0);  
  62.                 System.out.println("回传参数:name="+name+",age="+age);  
  63.             }  
  64.         }  
  65.     }  
  66.   
  67.       
  68. }  


AnotherActivity如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package cc.vv;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. /** 
  9.  * 当该Activity调用finish()或按下Back键时利用setResult()回传数据 
  10.  */  
  11. public class AnotherActivity extends Activity {  
  12.     private Button mButton;  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.another);  
  17.         mButton=(Button) findViewById(R.id.closeButton);  
  18.         mButton.setOnClickListener(new ButtonOnClickListenerImpl());  
  19.     }  
  20.     private class ButtonOnClickListenerImpl implements OnClickListener{  
  21.         @Override  
  22.         public void onClick(View v) {  
  23.             setResultData();  
  24.             finish();  
  25.         }  
  26.     }  
  27.       
  28.     /** 
  29.      * 注意: 
  30.      * onBackPressed()在源码中会调用到finish()方法. 
  31.      * 所以将setResultData()置于super.onBackPressed()之前 
  32.      */  
  33.     @Override  
  34.     public void onBackPressed() {  
  35.         setResultData();  
  36.         super.onBackPressed();  
  37.     }  
  38.       
  39.     private void setResultData(){  
  40.         Intent intent=new Intent();  
  41.         intent.putExtra("name", "喜羊羊");  
  42.         intent.putExtra("age", 2);  
  43.         setResult(RESULT_OK, intent);  
  44.     }  
  45.       
  46. }  


main.xml如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.     <TextView   
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_centerHorizontal="true"  
  11.         android:text="@string/mainActivity_tip"   
  12.         android:textSize="25sp"  
  13.         />  
  14.     <Button  
  15.         android:id="@+id/button"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_centerInParent="true"  
  19.         android:text="@string/button_tip"   
  20.         android:textSize="25sp"/>  
  21.   
  22. </RelativeLayout>  


another.xml如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout   
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent" >  
  6.        
  7.    <TextView   
  8.        android:layout_width="200dip"  
  9.        android:layout_height="50dip"  
  10.        android:layout_centerHorizontal="true"  
  11.        android:layout_marginTop="50dip"  
  12.        android:gravity="center"  
  13.        android:text="@string/anotherActivity_tip"  
  14.        />  
  15.      
  16.          
  17.    <Button  
  18.        android:id="@+id/closeButton"  
  19.        android:layout_width="150dip"  
  20.        android:layout_height="50dip"  
  21.        android:layout_centerInParent="true"  
  22.        android:layout_marginTop="50dip"  
  23.        android:gravity="center"  
  24.        android:text="@string/closeActivity"  
  25.        />  
  26. </RelativeLayout>  


strings.xml如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">TestActivity3</string>  
  5.     <string name="action_settings">Settings</string>  
  6.     <string name="hello_world">Hello world!</string>  
  7.     <string name="button_tip">跳转到下一个Activity</string>  
  8.     <string name="mainActivity_tip">测试startActivityForResult</string>  
  9.     <string name="anotherActivity_tip">这是第二个Activity</string>  
  10.     <string name="closeActivity">关闭该Activity</string>  
  11.       
  12. </resources

startActivityForResul完整详解示例