Android開發——Intent

來源:互聯網
上載者:User

一、什麼是Intent?

Intent的中文意思是目的。在Android中也是“目的”的意思。就是我們要去哪裡,從這個activity要前往另一個Activity就需要用到Intent。

範例程式碼一:

   1: //定義一個Intent
   2: Intent intent = new Intent(IntentDemo.this, AnotherActivity2.class);
   3: //啟動Activity
   4: startActivity(intent);

以上範例程式碼的作用是從IntentDemo這個activity切換到AnotherActivity2。這是Intent其中一種構造方法,指定兩個Activity。為什麼需要指定兩個活動呢?因為在Android中有一個活動棧,這樣的構造方式才能確保正確的將前一個活動壓入棧中,才能在觸發返回鍵的時候活動能夠正確出棧。

注意:所有的Activity都必須先在AndroidManifest.xml裡面配置聲明。一下為本文用到的程式設定檔

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   3:     package="com.halzhang.android.intent" android:versionCode="1"
   4:     android:versionName="1.0">
   5:     <application android:icon="@drawable/icon" android:label="@string/app_name">
   6:         <activity android:name=".IntentDemo" android:label="@string/app_name">
   7:             <intent-filter>
   8:                 <action android:name="android.intent.action.MAIN" />
   9:                 <category android:name="android.intent.category.LAUNCHER" />
  10:             </intent-filter>
  11:         </activity>
  12:         <activity android:name=".AnotherActivity" android:label="another">
  13:             <intent-filter>
  14:                 <action android:name="android.intent.action.EDIT" />
  15:                 <!-- category一定要配置,否則報錯:找不到Activity -->
  16:                 <category android:name="android.intent.category.DEFAULT" />
  17:             </intent-filter>
  18:         </activity>
  19:  
  20:         <activity android:name=".AnotherActivity2" android:label="another2">
  21:             <intent-filter>
  22:                 <action android:name="android.intent.action.EDIT" />
  23:                 <category android:name="android.intent.category.DEFAULT" />
  24:             </intent-filter>
  25:         </activity>
  26:     </application>
  27:     <uses-sdk android:minSdkVersion="3" />
  28:     <!-- 
  29:         上面配置的兩個activity具有相同的action類型,都為“android.intent.action.EDIT”
  30:         當Intent的action屬性為Intent.ACTION_EDIT時,系統不知道轉向哪個Activity時,
  31:         就會彈出一個Dialog列出所有action為“android.intent.action.EDIT”的
  32:         Activity供使用者選擇
  33:      -->
  34: </manifest> 

二、Intent的建構函式

公用建構函式:

1、Intent() 空建構函式

2、Intent(Intent o) 拷貝建構函式

3、Intent(String action) 指定action類型的建構函式

4、Intent(String action, Uri uri) 指定Action類型和Uri的建構函式,URI主要是結合程式之間的資料共用ContentProvider

5、Intent(Context packageContext, Class<?> cls) 傳入組件的建構函式,也就是上文提到的

6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前兩種結合體

Intent有六種建構函式,3、4、5是最常用的,並不是其他沒用!

Intent(String action, Uri uri)  的action就是對應在AndroidMainfest.xml中的action節點的name屬性值。在Intent類中定義了很多的Action和Category常量。

範例程式碼二:

   1: Intent intent = new Intent(Intent.ACTION_EDIT, null);
   2: startActivity(intent);

範例程式碼二是用了第四種建構函式,只是uri參數為null。執行此代碼的時候,系統就會在程式主設定檔AndroidMainfest.xml中尋找

<action android:name="android.intent.action.EDIT" />對應的Activity,如果對應為多個activity具有<action android:name="android.intent.action.EDIT" />此時就會彈出一個dailog選擇Activity,如:

 如果是用範例程式碼一那種方式進行發送則不會有這種情況。

三、利用Intent在Activity之間傳遞資料

在Main中執行如下代碼:

   1: Bundle bundle = new Bundle();
   2: bundle.putStringArray("NAMEARR", nameArr);
   3: Intent intent = new Intent(Main.this, CountList.class);
   4: intent.putExtras(bundle);
   5: startActivity(intent);

在CountList中,代碼如下:

   1: Bundle bundle = this.getIntent().getExtras();
   2: String[] arrName = bundle.getStringArray("NAMEARR");

以上代碼就實現了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.