Android 學習筆記(10)—— Intent 基本運用

來源:互聯網
上載者:User

標籤:

夏至 歡迎轉載,也請保留這段申明,謝謝

    最近太忙了,都沒什麼時間來整理,前9個上傳之後格式不對,都沒好好整理,以後會抽空整理。
Android的通訊橋樑 —— Intent 。

使用一個activity實在是太簡單了,布局上也有限,那我們能不能像我們真機上的一樣,一點就跳到另一個介面去了。這裡我們就使用Intent,在活動中穿梭。至於為什麼學著UI組件,突然跑到這個傢伙來,那當然是為下一節做準備啦。除了活動,它還可以是服務或者廣播。啟動可以下列方法:

  • startActivity(Intent)/startActivityForResult(Intent):來啟動一個Activity
  • startService(Intent)/bindService(Intent):來啟動一個Service
  • sendBroadcast:發送廣播到指定BroadcastReceiver

這裡,我們就簡單地用 Activity 來當例子,畢竟用得最多的就是活動了。

顯式Intent與隱式Intent的區別
  • 顯式Intent:
    通過組件名指定啟動的目標組件,比如startActivity(new
    Intent(A.this,B.class));每次啟動的組件只有一個。

  • 隱式Intent:
    不指定組件名,而指定Intent的Action,Data,或Category,當我們啟動 組件時,會去匹配AndroidManifest.xml相關組件的Intent-filter,逐一匹配出滿足屬性的組件, 當不止一個滿足時, 會彈出一個讓我們選擇啟動哪個的對話方塊

1.1 顯示Intent
首先,我們先建立一個布局,就叫做sec_linearlayout好了:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"       android:layout_width="match_parent"       android:layout_height="match_parent">    <Button        android:id="@+id/btnBack"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="按鍵測試"/></LinearLayout>然後,我們再建立一個新activity,名字可以自己取,比如我的取為SencondActivity,讓它繼承Activity:```javapublic class SecondActivity  extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.sec_linearlayout);    }}<div class="se-preview-section-delimiter"></div>

最後,我們在AndroidManifest.xml,把我們新定義的activity包含進去。這裡因為不是主activity。所以只要一行就可以了。如下:

接下來就是在主Activity寫程式了,由上面的 Intent(A.this,B.class))和startActivity(Intent)就可以了:

setContentView(R.layout.linearlayout);Button button = (Button)findViewById(R.id.btnInter);button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {    Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivity(intent);    }});<div class="se-preview-section-delimiter"></div>
1.2 隱式Intent

傳遞資料給下一個活動
我們先來看一下AndroidManifest.xml檔案中標籤

其中畫圈圈的地方,就是我們隱式Intent最主要的東西了。

  • aciotn : 表示當前可以相應的活動,有且只有一個。
  • category:表示包含的一些附加資訊,和相互配合,可以多個。

可以試試這個效果,先體驗一下:

這裡我們假設一下,比如我們就讓第二個activity瀏覽我們手機預設瀏覽器,並跳到百度。在事件開發中,我們不可能因為一個事件,而又重新去開發一個瀏覽器,這不實現,所以,我們可以調用系統的。修改如下:

<activityandroid:name=".SecondActivity">    <intent-filter>        <action android:name="android.intent.action.VIEW"/>        <category android:name="android.intent.category.DEFAULT"/>    </intent-filter></activity><div class="se-preview-section-delimiter"></div>

效果

關於隱式Intent我們就先瞭解到這,先簡單瞭解就行,後面我們再來深入研究。

1.3 多個活動之間傳遞資料

在啟動活動時傳遞資料的思路其實很簡單,Intent中提供了一系列 putExtra(string name,value)方法的重載,可以把我們想要傳遞的資料暫存在Intent中,啟動了另一個活動後,只需要把這些資料再從Intent中取出就可以了,接收可以用:getStringExtra(string name

putExtra(string name,value):name為上下文索引值,第二個為要傳遞的資料,支援多種類型

所以,主activity這樣寫:

button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {    Intent intent = new Intent(MainActivity.this,SecondActivity.class);    intent.putExtra("data","hello world");    startActivity(intent);}<div class="se-preview-section-delimiter"></div>

第二個活動這樣寫

這樣,我們就完成了想下一個活動傳遞的功能了,當然了,不一定是字串,可以是內容,檔案資料等其他。
裡我們使用了字串,所以用getSringExtra()來接收,如果是整型,則用 getIntExtra(),如果是boolean 型,則用 getBooleanExtra(),以此類推。

返回資料給上一個活動

既然可以傳資料給下一個活動,那麼肯定能傳遞資料給上一個活動了。不過這裡我們不再用startActivity(),而是用startActivityForResult()來啟動活動。該方法接收兩個參數,第一個還是Intent ,第二個是請求碼。直接看代碼:主activity:

button.setOnClickListener(new View.OnClickListener() {@Override    public void onClick(View v) {    // Intent(A.this,B.class));    Intent intent = new Intent(MainActivity.this,SecondActivity.class);    startActivityForResult(intent,1);       }});

由於我們使用startActivityForResult()來啟動SecondActivity的,在SecondActivity被銷毀之後會回調上一個活動的onActivityResult()方法,因為我們需要在MainActivity中重寫這個方法來擷取資料。

這樣,當第二個活動被銷毀的時候,就能返回資料到onActivityResult()來,我們就能獲資料了。

Intent 就暫時怎麼多了,深入我們在進階在來講解。

不得不吐槽一下CSDN的圖片粘貼的問題,每次都上傳真心蛋疼,有誰支個招嗎。。。。

Android 學習筆記(10)—— Intent 基本運用

聯繫我們

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