zoukankan      html  css  js  c++  java
  • startActivityForResult详解

    在启动另外一个Activity的时候,有两种方法,一种是直接使用startActivity,另外一种就是使用startActivityForResult。本文主要通过一个Demo来学习一下第二种。

    startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法,所以我们可以重写一下这个方法。直接看代码吧:

    第一个页面代码:

     1  
     2  3   
     4 import android.app.Activity;  
     5 import android.content.Intent;  
     6 import android.os.Bundle;  
     7 import android.view.View;  
     8 import android.view.View.OnClickListener;  
     9 import android.widget.Button;  
    10 import android.widget.TextView;  
    11   
    12 public class TestStartActivityForResultActivity extends Activity implements  
    13         OnClickListener {  
    14     private TextView mText01;  
    15     private TextView mText02;  
    16     private Button button01;  
    17     private Button button02;  
    18     private Intent mIntent;  
    19     private int requestCode;  
    20   
    21     /** Called when the activity is first created. */  
    22     @Override  
    23     public void onCreate(Bundle savedInstanceState) {  
    24         super.onCreate(savedInstanceState);  
    25         setContentView(R.layout.main);  
    26         mText01 = (TextView) findViewById(R.id.mText01);  
    27         mText02 = (TextView) findViewById(R.id.mText02);  
    28         button01 = (Button) findViewById(R.id.mButton01);  
    29         button02 = (Button) findViewById(R.id.mButton02);  
    30         button01.setOnClickListener(this);  
    31         button02.setOnClickListener(this);  
    32         mText01.setText("01");  
    33         mText02.setText("02");  
    34   
    35         mIntent = new Intent();  
    36         mIntent.setClass(TestStartActivityForResultActivity.this,  
    37                 Activity02.class);  
    38     }  
    39   
    40     @Override  
    41     public void onClick(View v) {  
    42         switch (v.getId()) {  
    43         case R.id.mButton01:  
    44             // 请求码的值随便设置,但必须>=0  
    45             requestCode = 0;  
    46             startActivityForResult(mIntent, requestCode);  
    47             break;  
    48         case R.id.mButton02:  
    49             requestCode = 2;  
    50             startActivityForResult(mIntent, requestCode);  
    51             break;  
    52         default:  
    53             break;  
    54         }  
    55     }  
    56   
    57     // 回调方法,从第二个页面回来的时候会执行这个方法  
    58     @Override  
    59     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    60         String change01 = data.getStringExtra("change01");  
    61         String change02 = data.getStringExtra("change02");  
    62         // 根据上面发送过去的请求吗来区别  
    63         switch (requestCode) {  
    64         case 0:  
    65             mText01.setText(change01);  
    66             break;  
    67         case 2:  
    68             mText02.setText(change02);  
    69             break;  
    70         default:  
    71             break;  
    72         }  
    73     }  
    74 }  
    

     第一个页面布局文件:

     1 <?xml version="1.0" encoding="utf-8"?>  
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
     3     android:orientation="vertical"  
     4     android:layout_width="fill_parent"  
     5     android:layout_height="fill_parent"  
     6     >  
     7 <TextView    
     8     android:id="@+id/mText01"  
     9     android:layout_width="fill_parent"   
    10     android:layout_height="wrap_content"   
    11     />  
    12 <TextView    
    13     android:id="@+id/mText02"  
    14     android:layout_width="fill_parent"   
    15     android:layout_height="wrap_content"   
    16     />  
    17 <Button   
    18     android:id="@+id/mButton01"  
    19     android:layout_width="fill_parent"   
    20     android:layout_height="wrap_content"  
    21     android:text="改变第一行文本的值"  
    22     />  
    23 <Button   
    24     android:id="@+id/mButton02"  
    25     android:layout_width="fill_parent"   
    26     android:layout_height="wrap_content"  
    27     android:text="改变第二行文本的值"  
    28     />  
    29 </LinearLayout>  

    第二个页面代码:

     1 import android.app.Activity;  
     2 import android.content.Intent;  
     3 import android.os.Bundle;  
     4   
     5 public class Activity02 extends Activity {  
     6     private int resultCode = 0;  
     7   
     8     @Override  
     9     protected void onCreate(Bundle savedInstanceState) {  
    10         super.onCreate(savedInstanceState);  
    11         setContentView(R.layout.activity02);  
    12         Intent mIntent = new Intent();  
    13         mIntent.putExtra("change01", "1000");  
    14         mIntent.putExtra("change02", "2000");  
    15         // 设置结果,并进行传送  
    16         this.setResult(resultCode, mIntent);  
    17         // this.finish();  
    18     }  
    19   
    20 }  
     

    第二个页面布局文件:

    <?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"  
        >  
    <TextView    
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="文本的值已经改变"  
        />  
    </LinearLayout> 

     

    AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
          package="org.sunchao"  
          android:versionCode="1"  
          android:versionName="1.0">  
        <uses-sdk android:minSdkVersion="8" />  
      
        <application android:icon="@drawable/icon" android:label="@string/app_name">  
            <activity android:name=".TestStartActivityForResultActivity"  
                      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=".Activity02" />  
      
        </application>  
    </manifest>  
  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/baorantHome/p/6984819.html
Copyright © 2011-2022 走看看