一、什么是Intent?
??????? Intent的中文意思是目的。在Android中也是“目的”的意思。就是我們要去哪里,從這個activity要前往另一個Activity就需要用到Intent。
下面是 Intent 兩個最基本的函數:
1、定義一個Intent
[java]?view plaincopy
Intent?intent?=?new?Intent(IntentDemo.this,?AnotherActivity2.class);??
2、啟動 Activity
[java]?view plaincopy
startActivity(intent);??
以上示例代碼的作用是從IntentDemo這個activity切換到AnotherActivity2。這是Intent其中一種構造方法,指定兩個Activity。為什么需要指定兩個活動呢?因為在Android中有一個活動棧,這樣的構造方式才能確保正確的將前一個活動壓入棧中,才能在觸發返回鍵的時候活動能夠正確出棧。
???? Intent 是Android 程序中各組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent 一般可被用于啟動活動、啟動服務、以及發送廣播等場景.
?
Intent 的用法大致可以分為兩種,顯式Intent 和隱式Intent,我們先來看一下顯式Intent如何使用。
二、使用 Intent 實現活動的顯示跳轉
這里我們以按鈕實現活動跳轉為例,為實現這個功能,我們需要三個步驟:
1、拿到按鈕對象
???????如何拿到按鈕對象呢?通過資源id,前面我們提到過,在R.id.xxx 中會有我們的資源id,但button按鈕是在layout 中創建的,系統不會為其創建資源id,所以我們需要在layout 設置 button 時自己加上id,、,具體方法如下:
[java]?view plaincopy
<Button?? ???????android:id="@+id/button1"?? ???????android:layout_width="match_parent"?? ???????android:layout_height="wrap_content"?? ???????android:text="點我點我!"??? ???????android:textSize="25sp"/>??
可以看到設置id 的方法是 id = "@+id/button1",這里button1 即我們將使用的資源id。
?
2、為此按鈕設定點擊監聽事件
這樣每當點擊按鈕時,就會執行監聽器中的onClick()方法,我們只需要在這個方法中加入待處理的邏輯就行了;
具體代碼如下:
[java]?view plaincopy
public?class?MainActivity?extends?Activity?{?? ????private?Button?button;?? ?????? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ????????setContentView(R.layout.activity_main);?? ?????????? ????????button?=?(Button)?findViewById(R.id.button);?? ?????????? ????????button.setOnClickListener(new?OnClickListener()?{?? ????????????@Override?? ????????????public?void?onClick(View?v)?{?? ?????????????? ????????????}?? ????????});?? ????}?? }??
3、實現跳轉
????? 當然這是最重要的一步了,通過Intent 實現,我們先來了解一下Intent 函數;
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 對象
[java]?view plaincopy
Intent?intent?=?new?Intent();??
2)、把我們的意圖封裝進Intent 對象中
這里我們需要先了解 context?:應用程序上下文,就是表示當前對象的一個語境,訪問全局信息?的API
這里使用了Intent 的 setclass 方法,我們來看看其定義:
[java]?view plaincopy
? ? ? ? ? ? ? ? ? ? ? ? ? ?? ???public?Intent?setClass(Context?packageContext,?Class<?>?cls)?{?? ???????mComponent?=?new?ComponentName(packageContext,?cls);?? ???????return?this;?? ???}??
這里 packageContext 即我們現在的 activity ,而Class<?> cls 則是我們的目的activity ,我們看看具體實現:
[java]?view plaincopy
intent.setClass(MainActivity.this,SecondActivity.class);??
?
3)告訴系統執行操作
[java]?view plaincopy
startActivity(intent);??
實現這三步就能基本實現活動的跳轉了;
?
三、向下一個活動傳遞數據
?????? Intent 還可以在啟動活動的時候傳遞數據的,我們來一起看一下。
????? 在啟動活動時傳遞數據的思路很簡單,Intent 中提供了一系列putExtra()方法的重載,可以把我們想要傳遞的數據暫存在Intent 中,啟動了另一個活動后,只需要把這些數據再從Intent 中取出就可以了。比如說FirstActivity 中有一個字符串,現在想把這個字符串傳遞到SecondActivity 中。注意這里putExtra()方法接收兩個參數,第一個參數是鍵,用于后面從Intent中取值,第二個參數才是真正要傳遞的數據。
1、putExtra 方法:
[java]?view plaincopy
public?Intent?putExtra(String?name,?String?value)?{?? ????if?(mExtras?==?null)?{?? ????????mExtras?=?new?Bundle();?? ????}?? ????mExtras.putString(name,?value);?? ????????return?this;?? }??
其中putstring 方法定義如下:
[java]?view plaincopy
public?void?putString(String?key,?String?value)?{?? ????unparcel();?? ????mMap.put(key,?value);?? }??
所以這里,我們可以這樣實現
[java]?view plaincopy
putExtra("key","我是第一個活動");??
則會向跳轉的活動發送字符串“我是第一個活動”;
?
2、接收方如何接受呢?
????? 這里調用getStringExtra?函數傳入相應的鍵值,就可以得到傳遞的數據了。這里由于我們傳遞的是字符串,所以使用getStringExtra()方法來獲取傳遞的數據,如果傳遞的是整型數據,則使用getIntExtra()方法,傳遞的是布爾型數據,則使用getBooleanExtra()方法,以此類推
[java]?view plaincopy
public?String?getStringExtra(String?name)?{?? ????return?mExtras?==?null???null?:?mExtras.getString(name);?? }??
其會調用getString 函數:
[java]?view plaincopy
public?String?getString(String?key)?{?? ????unparcel();?? ????Object?o?=?mMap.get(key);?? ????if?(o?==?null)?{?? ????????return?null;?? ????}?? ????try?{?? ????????return?(String)?o;?? ????}?catch?(ClassCastException?e)?{?? ????????typeWarning(key,?o,?"String",?e);?? ????????return?null;?? ????}?? }??
并將其顯示在TextView 上:
[java]?view plaincopy
@android.view.RemotableViewMethod?? ???public?final?void?setText(CharSequence?text)?{?? ???????setText(text,?mBufferType);?? ???}??
?
下面是實現具體代碼:
MainActivity 方
[java]?view plaincopy
package?cn.com.qiang.buttondemo;?? ?? import?android.os.Bundle;?? import?android.app.Activity;?? import?android.content.Intent;?? import?android.view.View;?? import?android.view.View.OnClickListener;?? import?android.widget.Button;?? ?? public?class?MainActivity?extends?Activity?{?? ?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ????????setContentView(R.layout.activity_main);?? ?????????? ????????Button?button1?=?(Button)?findViewById(R.id.button1);?? ?????????? ????????button1.setOnClickListener(new?MyListon());?? ????}?? ?????? ????class?MyListon?implements?OnClickListener{?? ????????@Override?? ????????public?void?onClick(View?v)?{?? ?????????????? ????????Intent?intent?=?new?Intent();?? ????????intent.setClass(MainActivity.this,SecondActivity.class);?? ????????intent.putExtra("key",?"給你發個美女圖片");?? ????????startActivity(intent);?? ????????}?? ????}????? }??
SecondActivity 方
[java]?view plaincopy
package?cn.com.qiang.buttondemo;?? ?? import?android.app.Activity;?? import?android.content.Intent;?? import?android.os.Bundle;?? import?android.widget.TextView;?? ?? public?class?SecondActivity?extends?Activity?{?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState){?? ?????????? ????????super.onCreate(savedInstanceState);?? ????????setContentView(R.layout.activity_second);?? ?????? ????????Intent?intent?=?getIntent();?? ????????String?s?=?intent.getStringExtra("key");?? ????????TextView?tv?=?(TextView)?findViewById(R.id.tv);?? ????????tv.setText(s);?? ????}?? } ?
總結
以上是生活随笔為你收集整理的Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。