Android之Activity的幾種跳轉方式

來源:互聯網
上載者:User

標籤: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的幾種跳轉方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.