標籤:
Intent不僅用來啟動一個活動,Intent還可以在啟動活動的時候傳遞參數。
1.向下一個活動傳遞資料
啟動活動的時候傳遞資料,Intent提供了一系列putExtra()方法的重載,可以把要傳遞的資料暫存在Intent中,啟動了另一個活動後,
只需要把這些資料再從Intent中取出就可以了。
例如FirstActivity中有一個字串,現在把這個字串傳遞到SecondActivity中,代碼如下:
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); } });
上面的代碼中用顯示Intent方式來啟動SecondActivity,然後通過putExtra()方法傳遞了一個字串。
putExtra()方法接收兩個參數,第一個參數是鍵,用於後面從Intent中取值,第二個參數是真正要傳遞的資料。
然後在SecondActivity中將傳遞的參數取出,並列印出來,代碼如下:
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()方法擷取到用於啟動SecondActivity的Intent,通過getStringExtra()方法,傳入相應的索引值,就可以得到傳遞的資料了。
注意:傳遞字串用getStringExtra(); 整型資料用getIntExtra();傳遞布爾型資料用getBooleanExtra()。
2.返回資料給上一個活動
Activity中有一個startActivityForResult()方法也可以用來啟動活動,
startActivityForResult (Intent intent, int requestCode)方法接收兩個參數:
* 第一個參數還是Intent;
* 第二個參數是請求碼,用來在之後的回調中判斷資料的來源。
修改FirstActivity中按鈕的事件,代碼如下:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this,SecondActivity.class); //請求碼只要是一個唯一值就可以。 startActivityForResult(intent, 1); } });
這裡,使用startActivityForResult()方法來啟動SecondActivity,請求碼只要是一個唯一值就可以。
然後修改SecondActivity中按鈕的點擊事件,並添加返回資料的邏輯代碼,代碼如下:
button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); //調用setResult()方法,該方法專門用於向上一個活動返回資料的。 //setResult()方法接收首歌參數,第一個參數用於向上一個活動返回處理結果,一般使用RESULT_OK或RESULT_CANCELED //第二個參數是把帶有資料的Intent傳遞迴去,然後調用finish()方法來銷毀當前活動。 setResult(RESULT_OK, intent); finish(); } });
上述代碼中還是要建立一個Intent,這個Intent僅僅用來傳遞資料,它沒有指定任何意圖。把要傳遞的資料存放在Intent中,然後調用setResult()方法
接收兩個參數。
調用setResult()方法,該方法專門用於向上一個活動返回資料的。setResult()方法接收兩個參數,
*第一個參數用於向上一個活動返回處理結果,一般使用RESULT_OK或RESULT_CANCELED
*第二個參數是把帶有資料的Intent傳遞迴去,然後調用finish()方法來銷毀當前活動。
因為使用startActivityForResult()方法來啟動SecondActivity活動的,在SecondActivity被銷毀之後會回調上一個活動的onActivityResult()方法,所以需要在FirstActivity中重寫onActivityResult()方法來得到返回資料。onActivityResult (int requestCode, int resultCode, Intent data)方法帶有三個參數:
* 第一個參數:requestCode,是在啟動活動時傳入的請求碼;
* 第二個參數:resultCode,返回資料時傳入的處理結果。
* 第三個參數:data,帶有返回資料的Intent。
在一個活動中有可能調用startActivityForResult()方法去啟動不同的活動,每一個活動返回的資料都會回調到onActivityResult() 這個方法中,所以首先檢查requestCode的值來判斷資料來源,然後在通過resultCode的值來判斷處理結果是否成功, 最後在從Intent中取返回的資料。
如果在SecondActivity中不是通過按鈕返回FirstActivity,而是通過Back鍵返回,這樣怎麼返回資料呢?
在這裡,如果通過Back鍵返回資料,可以通過在SecondActivity中重寫onPressed()方法來返回資料,代碼如下:
//如果不是通過SecondActivity中的按鈕在返回,而是通過按鈕Back鍵來返回,這就需要重寫onBackPressed()方法來返回資料 public void onBackPressed(){ Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
這樣,當使用者按下Back鍵,程式就會執行onPressed()方法。
Android學習筆記(五)