標籤:
//此系列博文是《第一行Android代碼》的學習筆記,如有錯漏,歡迎指正!
我們可以使用 Intent 來啟動一個活動, 還可以在啟動活動的時候傳遞資料的,下面一起來看一下:
一、向下一個活動傳遞資料
Intent中提供了一系列 putExtra()方法的重載,可以把我們想要傳遞的資料暫存在 Intent 中,啟動了另一個活動後,只需要把這些資料再從Intent 中取出就可以了。例如我們可以在mainactivity中建立一個字串,然後把它傳遞到second_activity裡:
1)先在MainActivity中構建好Intent:
@Overridepublic void onClick(View v) { String data = "Hello second_activity"; Intent intent = new Intent(MainActivity.this, second_activity.class); intent.putExtra("extra_data", data); startActivity(intent);}
我們使用顯式 Intent的方式來啟動 second_activity,並通過 putExtra()方法傳遞了一個字串。注意這裡 putExtra()方法接收兩個參數,第一個參數是鍵名,用於後面從 Intent中取值,第二個參數才是真正要傳遞的資料。
2)在second_activity中將intent的資料提取出來:
1 public class second_activity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.secend); 7 Intent intent = getIntent(); 8 String data = intent.getStringExtra("extra_data"); 9 Log.d("SecondActivity", data);10 }11 12 }
這裡我們通過 getIntent()方法擷取到用於啟動 second_activity 的 Intent,然後調用getStringExtra()方法,傳入相應的索引值,就可以得到傳遞的資料了。這裡由於我們傳遞的是字串,所以使用 getStringExtra()方法來擷取傳遞的資料,如果傳遞的是整型資料,則使用getIntExtra()方法,傳遞的是布爾型資料,則使用 getBooleanExtra()方法,以此類推。
此時啟動程式,運行效果如下:
按下button 1後可看到logcat中將傳入的字串列印出來了:
二、將資料返回給上一個活動
Activity中有一個 startActivityForResult()方法也是用於啟動活動的, 這個方法在活動銷毀的時候能夠返回一個結果給上一個活動。我們可以在這裡使用它:
1)修改MainActivity中的onClick()方法:
1 button1.setOnClickListener(new OnClickListener() {2 @Override3 public void onClick(View v) {4 Intent intent = new Intent(MainActivity.this, second_activity.class);5 startActivityForResult(intent, 1);6 }7 });
這裡我們使用了 startActivityForResult()方法來啟動 second_activity,請求碼只要是一個唯一值就可以了,這裡傳入了 1即可。
2)在second_activity中註冊一個button 2,添加返回資料的邏輯:
1 public class second_activity extends Activity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.second); 6 7 Button button2 = (Button) findViewById(R.id.button_2); 8 button2.setOnClickListener(new OnClickListener() { 9 @Override10 public void onClick(View v) {11 Intent intent = new Intent();12 intent.putExtra("data_return", "Hello MainActivity");13 setResult(RESULT_OK, intent);14 finish();15 }16 });17 }18 }
我們構建了一個 Intent,只不過這個 Intent 僅僅是用於傳遞資料而已,它沒有指定任何的“意圖” 。緊接著把要傳遞的資料存放在 Intent 中,然後調用了 setResult()方法。這個方法是專門用於向上一個活動返回資料的。setResult()方法接收兩個參數,第一個參數用於向上一個活動返回處理結果,一般只使用 RESULT_OK 或RESULT_CANCELED 這兩個值,第二個參數則是把帶有資料的 Intent 傳遞迴去,然後調用
了 finish()方法來銷毀當前活動。
3)重寫主活動的onActivityResult()方法:
由於我們是使用 startActivityForResult()方法來啟動 second_activity的, 在 second_activity被銷毀之後會回調上一個活動的 onActivityResult()方法,因此我們需要在 MainActivity 中重寫這個方法來得到返回的資料:
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 switch (requestCode) { 4 case 1: 5 if (resultCode == RESULT_OK) { 6 String returnedData = data.getStringExtra("data_return"); 7 Log.d("MainActivity", returnedData); 8 } 9 break;10 default:11 }12 }
onActivityResult()方法帶有三個參數,第一個參數 requestCode,即我們在啟動活動時傳入的請求碼。 第二個參數 resultCode, 即我們在返回資料時傳入的處理結果。 第三個參數 data,即攜帶著返回資料的 Intent。
因為一個主活動可能調用startActivityForResult()方法去啟動很多不同的活動,每一個活動返回的資料都會回調到 onActivityResult()這個方法中。所以我們需要先判斷requestCode(請求碼)來確定活動的來源,在通過resultCode來判斷活動執行的情況。
三、在按下back鍵時傳回資料
在上面的例子中我們是通過按下button 2 來返回資料的,假如想通過按下back鍵來傳遞資料呢?這是我們可以通過重寫second_activity中的 onBackPressed()方法:
1 @Override2 public void onBackPressed() {3 Intent intent = new Intent();4 intent.putExtra("data_return", "Hello FirstActivity");5 setResult(RESULT_OK, intent);6 finish();7 }
//End.
Android學習筆記(四)——再探Intent