在Miwok AppApp專案中,總共有5個Activities,其中activity_main.xml是主畫面,也是我們在手機上運行的畫面。
若要將主畫面與其他Activities連結,就必須使用Intent
。
之前的便當訂購App中我們也有使用到OnClick()事件,用在Button上,但Button其實也是一種TextView,是繼承了TextView的Class,因此我們當然也可以為TextView加上OnClick()囉。
例如以第一個區塊為例,加上android:onClick="openNumberList()"
:
<TextView
android:id="@+id/numbers"
style="@style/CategoryStyle"
android:background="@color/category_numbers"
android:text="@string/category_numbers"
android:onClick="openNumberList()"/>
並為MainActivity.java的class MainActivity
內加上對應的方法。
建立Intent物件i
,該建構式需要context和class兩個參數:public Intent (Context packageContext, Class <> cls)
.class
。 public void openNumberList(View view){
Intent i = new Intent(this, NumbersActivity.class);
startActivity(i);
}
先來回顧一下Day 13. App間的資訊傳遞 - Intent,當時也使用了Intent:
// 加入Intent
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_SUBJECT, customerName + "先生/小姐 的訂單"); //主旨
intent.putExtra(Intent.EXTRA_TEXT, priceMessage); //內容
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
兩者有些差異:
隱式(implicit) Intent
用在你不在意由哪個App來處理你的Intent時,需要的參數除了Action、Data URI外,可能還有Catagery、Components與Extras,來讓Android得知哪個App能夠最符合需求。
顯式(explicit) Intent
則用在你需要指定特定App或Activity來處理發出的Intent,只要指定Context與Component(可以是Class或Activity),如果有需要再加上Data URI。
顯然地,在便當訂購App中所使用的是implicit Intent
,任何一個email App都可以處理便當App所發出的Intent;而這個Miwok App的Main Activity使用的是explicit Intent
,明確地指定了NumbersActivity
來接收Intent。
由今天的實作可知,explicit Intent
最好是用在同一個App中,因為我們知道這個App中有哪些Activities,而implicit Intent
則可用在呼叫其他第三方的App時(其他App能不能接收Intent我們不得而知,因此還會再多一個if敘述來確保有App可接收時才執行)。