1. 程式人生 > >Android第一行代碼學習筆記六---Intent向活動傳遞數據

Android第一行代碼學習筆記六---Intent向活動傳遞數據

一行 而已 activity ase 是否 button can ride 重載

@1、向下一個活動傳遞數據:

Intent提供了一系列putExtra()方法的重載,可以把我們想要傳遞的數據暫存在Intent中,啟動了另一個活動後,只需把這些數據再從Intent中取出就可以了,比如firstActivity中有一個字符串要傳遞到secondActivity中,修改firstActivity中按鈕點擊事件,代碼可以這樣編寫:

 button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
        String data="Hello secondActivity
"; Intent intent=new Intent(firstActivity.this,secondActivity.class); intent.putExtra("extra_data",data); startActivity(intent); }
});

這裏使用顯示Intent的方式來啟動secondActivity,並通過putExtra()方法傳遞了一個字符串。putExtra()方法接收兩個參數,第一個參數是鍵,用於後面從Itent中取值,第二個參數才是真正要傳遞的數據。

然後在secondActivity中將傳遞的數據取出,並打印出來,代碼如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondlayout);
        Intent intent=getIntent();
        String data=intent.getStringExtra(("extra_data"));
        Log.d("secondActivity",data);
    }

首先通過getIntent()方法獲取到用於啟動secondActivity的Intent,然後調用getStringExtra()方法傳入相應的鍵值就可以得到傳遞的數據了,這裏傳入的是字符串使用getStringExtra()獲取傳遞的數據,如果傳遞的是整形數據,則使用getIntExtra()方法,如果傳遞的是布爾,則使用getBooleanExtra()方法,以此類推。

技術分享

@向上一個活動返回數據:

返回上一個活動只需要按一下bac鍵就可以了,並沒有一個用於啟動Intent來傳遞數據。Activity中還有一個startActivityForResult()方法也是用於啟動活動的,但這個方法期望在活動銷毀的時候能夠返回一個結果給上一個活動。它接收兩個參數,第一個參數還是Intent,第二個參數是請求碼,用於在之後的回調中判斷數據的來源。修改firstActivity按鈕點擊事件,代碼如下:

button.setOnClickListener(new View.OnClickListener() {
           public void onClick(View view) {
           Intent intent=new Intent(firstActivity.this,secondActivity.class);
           startActivityForResult(intent,1);
         }
}

這裏使用startActivityForResult()方法來啟動secondActivity,請求碼只要是一個唯一值就可以了,這裏傳入了1,接下來在secondActivity中給按鈕註冊點擊事件,並在點擊事件中返回數據的邏輯,代碼如下:

public class secondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondlayout);
        Button button=(Button)findViewById(R.id.Button2);
        button.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                Intent intent=new Intent();
                intent.putExtra("data_return","Hello firstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });
}
}

我們還是構建了一個Intent,只不過僅僅是用來傳遞數據而已,它沒有指定任何的意圖,緊接著把要傳送的數據存放在Intent中,然後調用了setResult()方法,它是專門用於向上一個活動返回數據的,setResult()方法接收兩個參數,第一個參數用於向上一個活動返回處理結果,一般只使用RESULT_OK或RESULT_CANCELED這兩個值,第二個參數則把帶有的Intent傳遞上去,然後調用finish()方法來銷毀當前活動。

由於我們是使用startActivityForResult()方法來啟動secondActivity的,在secondActivity被銷毀之後會回調上一個活動的onActivityResult()方法,因此我們需要在firstActivity中重寫這個方法來得到返回的數據,代碼如下:

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

onActivityResult()方法帶有三個參數,第一個參數是requesCode,即我們在啟動活動時傳入的請求碼。第二個參數是resultCode,即返回數據時傳入的處理結果。第三個參數data。即帶著返回數據的Intent。由於在每一個活動中都有可能調用startActivityForResult()方法去啟動很多不同的活動,每一個活動返回的數據都會回調到onActivityResult()方法中,因此首先要做的就是檢查requestCode的值來判斷數據來源。確定數據是從secondActivity返回的之後,再通過resultCode的值判斷是否成功。最後從data中取值並打印出來,這樣就完成了一個活動返回數據的工作。

技術分享

Android第一行代碼學習筆記六---Intent向活動傳遞數據