Android Activity之間跳轉與傳值

一、Activity跳轉與傳值,主要是通過Intent類來連接多個Activity,通過Bundle類來傳遞數據。

最常見最一般的頁面跳轉代碼,很簡單,如下:

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

或者:

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

 

二、在跳轉頁面時還需要傳遞數據,這個時候如何做呢?

如果數據比較少,比如只要傳一個名字,那麼只要加一句"intent.putExtra("Name", "ppy2790");"即可,代碼如下:

   Intent intent = new Intent();
   intent.setClass(FirstActivity.this, SecondActivity.class);
   intent.putExtra("Name", "ppy2790");
   startActivity(intent);


如果數據比較多,就需要使用 Bundle類了,代碼如下:
  Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
  
  /* 通過Bundle對象存儲需要傳遞的數據 */
  Bundle bundle = new Bundle();
  /*字符、字符串、布爾、字節數組、浮點數等等,都可以傳*/
  bundle.putString("Name", "ppy2790");
  bundle.putBoolean("Ismale", true);
  
  /*把bundle對象assign給Intent*/
  intent.putExtras(bundle);
  
  startActivity(intent);

 

三、在另一個Activity 獲取值
以上我們講的都是如何進行頁面跳轉及數據傳遞,那麼在另一個頁面SecondActivity上,應該如何接收數據呢?

在FirstActivity頁面上是以Bundle封裝了對象,自然在SecondActivity頁面也是以Bundle的方式來解開封裝的數據。主要通過"getIntent().getExtras()"方法來獲取Bundle,然後再從Bundle中獲取數據。 也可以通過" this.getIntent().getStringExtra("Name");"方法直接從Intent中獲取數據。

從Bundle獲取數據的代碼:

 @Override
  public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         /*加載頁面*/
         setContentView(R.layout.main);
         
         /*獲取Intent中的Bundle對象*/
         Bundle bundle = this.getIntent().getExtras();
         
         /*獲取Bundle中的數據,注意類型和key*/
         String name = bundle.getString("Name");
         boolean ismale = bundle.getBoolean("Ismale");
         
 }

 

四、
有時,在頁面跳轉之後,需要返回到之前的頁面,同時要保留用戶之前輸入的信息,這個時候該怎麼辦呢?

在頁面跳轉後,前一個Activity已經被destroy了。如果要返回並顯示數據,就必須將前一個Activity再次喚醒,同時調用某個方法來獲取並顯示數據。

要實現這個效果,需要做以下幾步:

1. 首先,從FirstActivity頁面跳轉到SecondActivity頁面時,不可以使用"startActivity()"方法,而要使用"startActivityForResult"方法。

2. 在FirstActivity頁面的Activity中,需要重寫"onActivityResult"方法
 @Override
 protected void onActivityResult(int requestCode,int resultCode,Intent data){
  
  switch(requestCode){
  case RESULT_OK:
   /*取得來自SecondActivity頁面的數據,並顯示到畫面*/
   Bundle bundle = data.getExtras();
   
         /*獲取Bundle中的數據,注意類型和key*/
         String name = bundle.getString("Name");
         boolean ismale = bundle.getBoolean("Ismale");
  }
 }

在SecondActivity頁面上加一個返回按鈕,並在事件寫如下代碼:

/*給上一個Activity返回結果*/
SecondActivity.this.setResult(RESULT_OK,intent);
/*結束本Activity*/
SecondActivity.this.finish();

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