Intent是從一個activity到另一個activity的重要工具。Intent分為顯性Intent和隱形Intent,本文主要分別講述這兩種Intent的用法,區別大家可以自己思考。
一、顯性Intent:
顯性Intent較隱性Intent來說稍微簡單些,其大致使用形式為
Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);
這樣通過這兩句語句就可以開啟SecondActivity這個Activity了,相對來說是比較簡單的
但是有時候我們不僅僅滿足于打開另一個Activity,我們還想要在兩個Activity之間傳遞一些數據,所以要將數據添加到Intent里面,然后傳遞到另一個Activity中,具體代碼如下
Intent intent =new Intent(this,SecondActivity.class);
intent.putExtra("name","zhangsan");
putExtra方法中有兩個參數,第一個是我們的key,用來標記一條信息;第二個是我們要傳遞信息了,可以是String,int,float等多種類型
這樣我們就將需要傳遞的值放在了intent中,并發送到了SecondActivity中在SecondActivity中添加以下代碼:
Intent intent = getIntent();
String name=intent.getStringExtra("name");
首先通過getIntent()來獲取從上一個Acticity中傳遞過來的Intent,再通過getStringExtra()方法來獲取我們需要的值,里面的參數是我們之間設置過的信息的key
這樣我們便將一條信息從一個Acticity傳遞到另一個Activity中了,但是我們這只是單方面的傳值,如果我們想從第一個Activity跳轉到第二個Activity中,在第二個Activity銷毀時跳轉到第一個Activity中并回饋給第一個Activity一些值該怎么做?
當然我們的Intent還是可以完成的:
Intent intent=new Intent(this,SecondActivity.class);
startActivityForResult(intent,1);
我們改變了一下開啟一個Intent的方法,startActivityForResult()顧名思義:開啟一個活動目的是獲得結果,第一個參數是我們要開啟的Intent,第二個參數是RequestCode,接下來我們需要在另一個Activity中設置反饋的值:
Intent intent=new Intent(this,FirstActivity.class);
intent.putStringExtra("name","zhangsan");
setResult(1,"Intent");
finish();
這樣,我們的Intent就成功反饋回去了,并且調用finish()方法會銷毀當前的Activity,返回到第一個Activity中,我們在第一個Activity需要做的就是獲取反饋回來的數據,我們需要重寫onActivityResult(int requestCod,int resultCode,Intent data)這樣一個方法,當有Intent返回時就會自動調用這個方法,我們來實現重寫一下:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode==1&&resultCode==1){
String name=data.getStringExtra("name);
}
}
這樣我們就成功的得到了反饋回來的數據了。
二、隱性Intent
隱性Intent并不象顯性Intent那樣明確,我們在清單文件里注冊一個Activity時要為其多配置幾項屬性:
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.a"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
我們為其設置了action和category屬性,其中action中name的值是我自己定義的,在稍后的Intent的編寫上我們也會為其添加action和category屬性,只有action和category兩項完全匹配時,Intent才能成功跳轉到SecondActivity中,下面時Intent的代碼編寫:
Intent intent=new Intent("com.a");
startActivity(intent);
Intent的構造方法中的參數是我們注冊時留下的action的name的值,至于category的值,我們在注冊時為其添加了android.intent.category.DEFAULT這條默認值,如果intent中沒有聲明,則默認category的值為這個值。這樣我們再startActivity我們就可以調用啟動另一個Activity了
至于傳遞數據和回饋數據使用方法和顯性Intent一樣,大家可以自己舉一反三的試一試。