日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)

發布時間:2023/12/9 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、什么是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
  • /**?
  • ????*?Convenience?for?calling?{@link?#setComponent(ComponentName)}?with?the?
  • ????*?name?returned?by?a?{@link?Class}?object.?
  • ????*?
  • ????*?@param?packageContext?A?Context?of?the?application?package?implementing?
  • ????*?this?class.?
  • ????*?@param?cls?The?class?name?to?set,?equivalent?to?
  • ????*????????????<code>setClassName(context,?cls.getName())</code>.?
  • ????*?
  • ????*?@return?Returns?the?same?Intent?object,?for?chaining?multiple?calls?
  • ????*?into?a?single?statement.?
  • ????*?
  • ????*?@see?#setComponent?
  • ????*/??
  • ???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)?{??
  • ????????????//?TODO?Auto-generated?method?stub??
  • ????????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){??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????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 实现活动的显示跳转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。