activity請求碼與結果碼

void     startActivityForResult(Intent intent, int requestCode)

void     startActivityForResult(Intent intent, int requestCode, Bundle options)

void     onActivityResult(int requestCode, int resultCode, Intent data)

final void     setResult(int resultCode)

final void     setResult(int resultCode, Intent data)


    requestCode 請求碼,即調用startActivityForResult() 傳遞過去的值

    resultCode 結果碼,結果碼用於標識返回數據來自哪個新Activity


二.請求碼的作用

    使用startActivityForResult(Intent intent, int requestCode)方法打開新的Activity,我們需要爲startActivityForResult()方法傳入一個請求碼(第二個參數)。請求碼的值是根據業務需要由自已設定,用於標識請求來源。例如:一個Activity有兩個按鈕,點擊這兩個按鈕都會打開同一個Activity,不管是那個按鈕打開新Activity,當這個新Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那個按鈕打開的,並且要做出相應的業務處理,這時可以這樣做:


     public void onCreate(Bundle savedInstanceState) {

            ....

        button1.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {

                startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);

            }

        });

        button2.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v) {

             startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);

            

            }

        }); 

                              

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

            switch(requestCode){

                case 1:

                //來自按鈕1的請求,作相應業務處理

                case 2:

                //來自按鈕2的請求,作相應業務處理

            }

        }

    }

三.結果碼的作用

    在一個Activity中,可能會使用startActivityForResult()方法打開多個不同的Activity處理不同的業務,當這些新Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。爲了知道返回的數據來自於哪個新Activity,在onActivityResult()方法中可以這樣做(ResultActivity和NewActivity爲要打開的新Activity):

      

    public class ResultActivity extends Activity {

        .....

        ResultActivity.this.setResult(1, intent);

        ResultActivity.this.finish();

    }

    public class NewActivity extends Activity {

        ......

        NewActivity.this.setResult(2, intent);

        NewActivity.this.finish();

    }

    public class MainActivity extends Activity { // 在該Activity會打開ResultActivity和NewActivity

        @Override 

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            switch(resultCode){

                case 1:

                // ResultActivity的返回數據

                case 2:

                // NewActivity的返回數據

            }

        }

    } 

上面的栗子說明,requestCode 和 resultCode都是返回提出請求的MainActivity結果處理函數onActivityResult()使用的標識,只是requestCode 主要用來標識是MainActivity也就是請求Activity發出的哪個請求,而resultCode則是標識哪個Activity處理並返回的請求。

但是,無論requestCode 還是 resultCode都無法用於處理請求的Activity標識是誰發出的請求。因此需要自行傳遞參數到處理請求的Activity。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章