Activity切換及傳遞數據

概述

 使用Intent對象實現Activity切換及傳遞數據,Intent類在Intent.java中定義。

Activity切換發起方

創建Intent對象

Intent intent=new Intent(CurrentActivity.this,TargetActivity.class);

構造函數:

Intent(Context packageContext,Class<?> cls)

參數說明:
Context packageContext
packageContextContext類型的實例,用來指定發起切換Activity動作的Activity,即當前Activity。ActivityContext的間接子類,所以可以直接使用this關鍵字指向當前Activity。
 注意不能想當然地使用this關鍵字去指代,因爲很多時候會在 內部類(Inner Class)或其它類中創建Intent對象,而this關鍵字指向當前層次類,這時候就需要使用CurrentActivity.this用法指代。

Class<?> cls
 這個參數是一個自動適配類型參數的泛型類Class<?>,作用是指定將要跳轉的目標Acticity,對於寫代碼而言,這個參數是一個完整的Activity類文件的文件名(即包含後綴.class),比如要從CurrentActivity跳轉至TargetActivity,這個參數就應該是TargetActivity.class.
 也可以使用如下方式指定跳轉指向:

Intent intent=new Intent();
intent.setClass(this,TargetActivity.class);

setClass()的定義:

public Intent setClass(Context packageContext,Class<?> cls)

 這種方式與上等價。

提要:
 創建Intent對象的過程使用構造函數Intent( )創建了一個Activity跳轉指向:當前Activity JumpTo 目標Activity,這兩個Activity分別對應構造函數Intent( )的兩個參數

Intent對象發送數據

 intent.putExtra("DataName",type param);

putExtra( )有很多版本,例如針對基本類型的:

public Intent putExtra(String name,boolean value);
public Intent putExtra(String name,int value);
public Intent putExtra(String name,double value);
...

參數說明:
String name
 該參數是被傳遞數據的名稱,是一個字符串,也稱數據的鍵(Key),目標Activity通過數據的接收指定的數據。
 第二個參數即實際數據,也稱數據的
 可以使用多個putExtra()方法向目標傳遞多個數據。
注意:Android API文檔對putExtra()的解釋爲:Add extended data to the intent. The name must include a package prefix, for example the app com.android.contacts would use names like "com.android.contacts.ShowAll".name String: The name of the extra data, with package prefix.value: The data value.
 在同一個包中傳遞數據時,可以簡化數據的鍵。

啓動目標Activity

startActivity(intent);

startActivityActivity.java中的定義:

public void startActivity(Intent intent)

這個方法在所有操作都完成後調用,傳入之前創建的Intent對象即可,此方法調用後則切換至目標Activity。

完整的切換Activity發起方代碼

CurrentActivity.java

import ...

public class CurrentActivity extends Activity 
                          implements View.OnClickListener {
                          
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //load currentActivity.xml
        setContentView(R.layout.currentActivity); 
        
        Button btn_1=(Button)findviewByID(R.id.btn_1);
        btn_1.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v){
        Intent intent=new Intent(this,TargetActivity.class);
        
        intent.putExtra("data_1","HelloWorld"); //putExtra String
        intent.putExtra("data_2",100); //putExtra int
        intent.putExtra("data_3",3.14); //putExtra double
        
        startActivity(intent);  //TargetActivity launch
        
    }
}

Activity切換目標方

獲取Intent對象

Intent intent=getIntent();

getIntent( )方法返回一個Intent對象用以切換Activity目標方接收數據,通過此對象可以得到傳遞來的數據。
getIntent( )Intent.java中的定義爲:

public Intent getIntent();

注意:Android API文檔中對getIntent()的解釋爲:Return the intent that started this activity.即調用此方法將返回開啓當前activity的intent對象。對於本例而言,返回的即爲CurrentActivity.java中創建的intent。

獲取數據

String Data=intent.getStringExtra("hello");

參數說明:
 該方法的定義爲:

 public String getStringExtra(String name)

 其中String name就是之前提到的數據的鍵(Key),對於基本類型數據,還有getXXXExtra( )方法如:

public boolean getBooleanExtra(String name);
public int getIntExtra(String name);
public double getDoubleExtra(String name);
 ...

完整的切換Activity目標方代碼

TargetActivity.java

 import ...
 
 public class TargetActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         //load targetActivity.xml
         setContentView(R.layout.targetAvtivity);

         Intent intent=getIntent();   //Get Intent object
         
         //Get String
         String Data_1=intent.getStringExtra("data_1"); 
         //Get int
         String Data_2=Integer.toString(intent.getIntExtra("data_2")); 
          //Get double
         String Data_3=Double.toString(intent.getDoubleExtra("data_3"));
         
         Toast.makeText(this,Data_1,LENGTH_SHORT).show();
         Toast.makeText(this,Data_2,LENGTH_SHORT).show();
         Toast.makeText(this,Data_3,LENGTH_SHORT).show();
     }
 }

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