標籤:android blog io ar os 使用 java for sp
1.顯式調用方法
Intent intent = new Intent(this, OtherActivity.class);//方法1Intent intent2 = new Intent();intent2.setClass(this, OtherActivity.class);//方法2intent2.setClassName(this, "com.mh.MainActivity.OtherActivity");//方法3,此方法可用於開啟其他的應用intent2.setComponent(new ComponentName(this, OtherActivity.class));//方法4startActivity(intent2);
2.隱式調用方法(只要action、category、data和要跳轉到的Activity在AndroidManifest.xml中設定的匹配就OK
<activity android:name="com.mh.MutiActivity.OtherActivity"> <Intent-filter> <action android:name="com.mh.test.action" /> <category android:name="com.mh.java" /> <!-- 因為startActivity()方法中內建了該類別,索引必須加上此類別否則android.intent.category.DEFAULT無法跳轉 --> <category android:name="android.intent.category.DEFAULT" /> <!-- 設定了哪些,則那些必須匹配,沒設定的可以任意寫 --> <data android:scheme="schemename" android:host="mh.com" android:path="/introduction" /> <!-- 資料類型 --> <data android:mimeType="txt/plain" /> <intent-filter></activity>
3.跳轉到另一個Activity後,當返回時能返回資料
a.在跳轉的Activity端,調用startActivityForResult(intent2, 1)跳轉到下一個Activity,其中第一個參數為傳入的意圖對象,第二個為設定的請求碼;
b.跳轉到第二個Activity後,調用setResult(100, intent)方法可返回上一個Activity,其中第一個參數為結果碼,第二個為傳入的意圖對象
c.在第一個Activity通過onActivityResult()方法獲得返回的資料
--------------------------------------------------------------
startActivityForResult(Intent intent, int requestCode)
onActivityResult(int requestCode, int resultCode, Intent data)
setResult(int resultCode, Intent data)
這三個函數,尤其要注意他們的參數!
現在有兩個activity A和B,假如我們從A跳轉到B,再B完成相應的工作以後finish掉B,然後傳資料給A,A在接受到資料以後做相應的操作。我們可以使用這三個函數:
A:
//啟動B
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivityForResult(intent, 2);//2是我們自己定義常量,對應下面使用到的resultCode
B:
//do something
setResult(2, null);
finish();
以上主要程式碼完成後我們需要在A中override onActivityResult()函數:
A:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (2 == requestCode) {
//do something
}
}
更詳細的:
startActivityForResult與onActivityResult
androidActivity之間的跳轉不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的方法。
其作用是可以用onActivityResult(int requestCode, int resultCode, Intent data)方法獲得請求Activity結束之後的操作。
需要注意三個方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent data)
例如如下代碼:從From跳轉至ToB和ToC
From:
if(條件){
Intent intent = new Intent(this, ToB.class);
startActivityForResult(serverIntent, REQUEST_CODE_01);//跳轉至ToB
}else{
Intent intent = new Intent(this, ToC.class);
startActivityForResult(serverIntent, REQUEST_CODE_02);//跳轉至ToC
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {
case REQUEST_CODE_01:
if(resultCode==Activity.RESULT_OK)
//do something
break;
case REQUEST_CODE_02:
//do something
break;
}
}
這裡說說startActivityForResult(Intent intent, int requestCode)的參數,第一個Intent不用說了,需要注意的是第二個,我們用的是REQUEST_CODE_01和REQUEST_CODE_02,其實這個是我們自己定義的一個int型常量,用於標記的,具體作用可在onActivityResult方法裡看到,用於判斷是從哪個Activity返回的。
ToB:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//結束之後會將結果傳回From
ToC:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//結束之後會將結果傳回From
setResult的第一個參數對應上面onActivityResult的第二個參數,注意別把onActivityResult的第一個參數與第二個參數搞混淆了,一個是請求標記,一個是返回標記。
Android之Activity的幾種跳轉方式