目錄
概述
使用Intent對象實現Activity切換及傳遞數據,Intent
類在Intent.java
中定義。
Activity切換發起方
創建Intent對象
Intent intent=new Intent(CurrentActivity.this,TargetActivity.class);
構造函數:
Intent(Context packageContext,Class<?> cls)
參數說明:
Context packageContext
packageContext
是Context
類型的實例,用來指定發起切換Activity動作的Activity,即當前Activity。Activity
是Context
的間接子類,所以可以直接使用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);
startActivity
在Activity.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();
}
}
歡迎指正