Android 活動之間傳遞數據

在啓動活動時傳遞數據的思路其實很簡單,Intent中提供了一系列putExtra()方法的重載,我們把需要傳遞的數據暫存在Intent中,啓動了另一個活動之後,只需要把這些數據提取出來就可以了。

活動間傳遞數據分爲兩種情況,向下傳遞以及返回上一個活動傳遞

1.向下一個活動傳遞數據

在AActivity中有一個字符串,現在要把這個字符串傳遞到BActivity中:

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = "Hello";
                Intent intent = new Intent(AActivity.this,BActivity.class);
                intent.putExtra("extar_data",data);
                startActivity(intent);
            }
        });

這裏我們用的是顯示Intent的方式來啓動BActivity,並通過putExtra()方法傳遞了一個字符串。

putExtra()方法接收兩個參數,第一個參數是 鍵 ,用於後面從Intent中取值, 第二個參數是傳遞的數據。

接下來在BActivity中把數據取出:

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");

這裏我們傳遞的是字符串,所以使用getStringExtra()方法來獲取數據;如果是整型數據,則使用getIntExtra()方法;如果是布爾型數據,則使用getBooleanExtra()方法.....

2.返回數據給上一個活動

startActivityForResult()方法也是用於啓動活動的,不同的是,這個方法期望在活動銷燬的時候能夠返回一個結果給上一個活動。

startActivityForResult()方法接收兩個參數,第一個參數還是Intent,第二個參數是請求碼,用於在之後的回調中判斷數據的來源。

修改一下之前的代碼:

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(AActivity.this,BActivity.class);
                startActivityForResult(intent,1);
            }
        });

這裏我們使用startActivityForResult()方法來啓動BActivity,請求碼只要是一個唯一值就可以了,這裏傳入了1。

接下來添加BActicity中返回數據的邏輯:

 button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","Hello AActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });

 我們還是構建了一個Intent,只不過這個Intent僅僅是用於傳遞數據,沒有指定任何的”意圖“。

緊接着把要傳遞的數據存放在Intent中,然後調用了setResult()方法。

這個方法是專門用於向上一個活動返回數據的。

setResult()方法接收兩個參數,第一個參數用於向上一個活動返回處理結果,一般使用RESULT_OK或RESULT_CANCELED這兩個值,第二個參數則把帶有數據的Intent傳遞回去,然後調用finish()方法來銷燬當前活動。

在BActivity被銷燬之後會回調上一個活動的onActivityResult()方法。

因此我們需要在AActivity中重寫onActivityResult()方法來得到數據:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch (requestCode){
            case 1:
                if (resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("data_return");
                }
                break;
                default:
        }   
 }

 

onActivityResult()方法有三個參數,第一個參數requestCode,啓動活動時傳入的請求碼。第二個參數resultCode,返回數據時傳入的處理結果。第三個參數data,攜帶着返回數據的Intent.

如果是通過按下Back鍵返回,那麼在onBackPressed()方法寫邏輯就好了。

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