Android學習筆記(四)——再探Intent

來源:互聯網
上載者:User

標籤:

  //此系列博文是《第一行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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.