startActivityForResult的用法


startActivityForResult方法是android中活動啟動的一種方法,這個方法接收兩個參數,第一個是Intent ,另一個是請求碼,請求碼只要是唯一值就可以。

這個方法可以在活動銷毀之后,返回一個結果給上一個活動。

例如:活動A打開了活動B,那么在活動B銷毀之后,可以返回一個結果給活動A。

這時候就要在活動A中,使用startActivityForResult方法打開活動B

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.activitytest.ACTTON_START");
                startActivityForResult(intent,1);//打開活動B
            }
        });

在活動B中用 setResult 方法設置好要返回的結果,setResult()接收兩個參數,第一個是活動返回處理結果,一般只是用RESULT_OK和RESULT_CANCELED,另一個這是將帶有數據的Intent傳遞回去。

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("data_return","測試一下");//要返回的結果
                setResult(RESULT_OK,intent);
                finish();//銷毀活動B
            }
        });

在活動B被銷毀后 ,會回調上一個活動(即活動A)的onActivityResult()方法(想要在活動A中獲取傳遞的結果,就需要覆寫該方法)。

   @Override   //                        請求碼          處理結果          帶返回數據的Intent                  
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode){
            case 1 :
                if(resultCode == RESULT_OK){
                    String returnData = data.getStringExtra("data_return");
                    Log.d("MainActivity",returnData);
                }
                break;
                default:
        }
    }

這樣在活動B被銷毀后,就會回到活動A,獲取到活動B返回的數據了。但在用戶如果在活動B並沒有點擊定義的按鈕button2,而是按下Back按鍵,這時候還需要覆寫活動B的 onBackPressed()方法。

            @Override
            public void onBackPressed() {
                Intent intent = new Intent();
                intent.putExtra("data_return","測試一下");
                setResult(RESULT_OK,intent);
                finish();
            }
        });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM