Android 关于Activity启动中的requestCode 和 resultCode 的传递和用法(Activity 三 )


《》我们知道在通过一个Activity启动另一个Activity的时候,可以使用startActivityForResult(Intent intent , int requestCode)方法,也就是说带有返回值的启动方法

使用这种方法的步骤如下:

1、当前的Activity重写onActivityResult(int requestCode , int resultCode , Intent) ,当被启动的Activity返回结果的时候,该方法将会被触发,其中的requestCode 和resultCode都是根据业务自行设置的

2、当前的Activity通过调用starActivityForResult(Intent intent , int requestCode)启动新的Activity

3、被启动的新的Activity需要调用setResult(int resultCode , Intent intent )方法设置将要返回个旧Activity的结果,(将数据封装在Intent中 )

关于带有返回结果的Activity的启动方法参见之前的“Activity的配置、启动和关闭”一文,下面来集中精力来讲一下requestCode 和 resultCode 的使用方法:

 

requestCode请求码的作用


使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

@Override  public void onCreate(Bundle savedInstanceState) {

2.        ....

3.        button1.setOnClickListener(new View.OnClickListener(){

4.            public void onClick(View v) {

5.                startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
7.           }
9.        });

10.        button2.setOnClickListener(new View.OnClickListener(){

11.            public void onClick(View v) {

12.                 startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
14.            }
16.        }); 
19.       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

20.               switch(requestCode){

21.                   case 1:

22.                   //来自按钮1的请求,作相应业务处理

23.                   case 2:

24.                   //来自按钮2的请求,作相应业务处理

25.                }

26.          }

27.}

 

 

resultCode结果码的作用


在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

public class ResultActivity extends Activity {

2.       .....

3.       ResultActivity.this.setResult(1, intent);

4.       ResultActivity.this.finish();

5.}

6.public class NewActivity extends Activity {

7.       ......

8.        NewActivity.this.setResult(2, intent);

9.        NewActivity.this.finish();

10.}

11.public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity

12.       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

13.               switch(resultCode){

14.                   case 1:

15.                   // ResultActivity的返回数据

16.                   case 2:

17.                    // NewActivity的返回数据

18.                }

19.          }

20.} 

 

 

下面就根据上面的分析写出一个完整的代码


整体上的思路是这样的:

1、总过用四个Activity,分别是:ActivityResult(主Activity)、SecondActivity 、 ThirdActivity 、FourthActivity

2、ActivityResult是主Activity,它的布局文件中安排有一个文本TextView,三个按钮,分别是 button1 , button2 ,button3

3、button1 和 button2 被点击时,都会起动SecondeActivity,但是button1发出的requestCode是 1  , 而button2发出的requestCode是 2 ,

4、button3被点击时,将会同时起动ThirdActivity和FourthActivity , 但是在ThirdActivity的setResult(int resultCode , Intent intent)的resultCode是  5 

     而FourthActivity的setResult(int resultCode , Intent intent)的resultCode是  6

5、当我们点击不同的button的时候都会最终回调  ActivityResult  的  onActivityResult(int requestCode, int resultCode, Intent data)方法,在这个方法中将会通过对请求

    码和结果码的判别 而 更新TextView中显示的内容

 

ActivityResult.java文件

public class ActivityResult extends Activity {
    
    Button button1;
    Button button2;
    Button button3 ;
    TextView textView ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3) ;
        textView = (TextView) findViewById(R.id.textView);
        
        button1.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ActivityResult.this ,SecondActivity.class ) ;
                startActivityForResult(intent , 1) ;
            }
        });
        
        button2.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ActivityResult.this , SecondActivity.class) ;
                startActivityForResult(intent , 2) ;
            }
        });
        
        button3.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(ActivityResult.this , ThirdActivity.class) ;
                Intent intent2 = new Intent(ActivityResult.this , FourthActivity.class);
                startActivityForResult(intent1 , 3) ;
                startActivityForResult(intent2 , 4) ;
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
        case 1 :
            textView.setText("SecondActivity是由  按钮one  启动的");
            break ;
        case 2 :
            textView.setText("SecondActivity是由 按钮two 启动的") ;
            break ;
        }
        
        switch(resultCode){
        case 5 :
            textView.setText("ThirdActivity返回了结果");
            break ;
        case 6 :
            textView.setText("FourthActivity返回了结果") ;
            break ;
        }
        
        super.onActivityResult(requestCode, resultCode, data);
    }
}

 

SecondeActivity.java文件

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SecondActivity.this.setResult(0,new Intent());
        SecondActivity.this.finish();
    }
}

 

ThirdActivity.java 文件

public class ThirdActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); ThirdActivity.this.setResult(5,new Intent()); ThirdActivity.this.finish(); } }

 

FourthActivity.java 文件

public class FourthActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FourthActivity.this.setResult(6,new Intent());
        FourthActivity.this.finish();
    }
}

 上面的程序中用到了多个Activity,一定记得在Manifest.xml文件中对他们进行配置


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM