Intent-數據傳遞

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

button1.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

        String data = "Hello SecondActivity";

        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

        intent.putExtra("extra_data", data);

        startActivity(intent);

    }

});

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.second_layout);

        Intent intent = getIntent();

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

        Log.d("SecondActivity", data);

    }

首先可以通過getIntent()方法獲取到用於啓動該Activity的Intent,然後調用getStringExtra()方法,傳入相應的鍵值,就可以得到傳遞的數據了。
返回數據給上一個活動
Activity中有一個startActivityForResult()方法也是用於啓動活動的,但這個方法期望在活動銷燬 時候能夠返回一個結果給上一個活動。
startActivityForResult()方法接受兩個參數,第一個參數還是Intent,第二個參數是請求碼,用於在之後回調中判斷數據的來源
例:
返回:
活動1中

button1.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

        startActivityForResult(intent, 1);

    }

});

這裏使用了startActivityForResult()方法來啓動SecondActivity,請求碼是一個唯一的值。
活動2中

Button button2 = (Button) findViewById(R.id.button_2);

        button2.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent intent = new Intent();

                intent.putExtra("data_return", "Hello FirstActivity");

                setResult(RESULT_OK, intent);

                finish();

            }

        });

我們可以看到這個構建了一個Intent,只不過這個Intent僅僅是用於傳遞數據而已,它沒有指定任何“意圖”,緊接着把要傳遞的數據存放在Intent中,然後調用了setResult()方法。這個方法非常重要,是專門用於向上一個活動返回數據的。setResult()方法接收兩個參數,第一個參數用於向上一個活動返回處理結果,一般只使用RESULT_OKRESULT_CANCELED這兩個值,第二個參數則是把帶有數據的Intent傳遞回去,然後調用了finish()方法來銷燬當前活動。
由於我們是使用startActivityForResult()方法來啓動SecondActivity的,SecondActivity被銷燬之後會回調上一個活動的onActivityResult()方法,因此我們需要在FirstActivity中重寫這個方法來得到返回的數據

@Override

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

    switch (requestCode) {

    case 1:

        if (resultCode == RESULT_OK) {

            String returnedData = data.getStringExtra("data_return");

            Log.d("FirstActivity", returnedData);

        }

        break;

    default:

    }

}

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

如果用戶是通過按下Back鍵回到FirstActivity,可重寫onBackPressed()方法來解決這個問題

@Override

public void onBackPressed() {

    Intent intent = new Intent();

    intent.putExtra("data_return", "Hello FirstActivity");

    setResult(RESULT_OK, intent);

    finish();

}


--------------------------------------------------------------------------------------------------------------------------------------

android 開發交流羣:264706196

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