今天將延續前兩天的範例,為各位介紹 ListView 的 Item 被點擊時可以怎麼被執行,同時讓大家知道 Intent 可以如何串接、延伸
在 Android 的世界裡,每個元件在被觸發的動作,不論是點擊、長按都一定都是用偵聽式去進行動作,而今天,我們要繼續延伸之前的範例,在 Mooge5 裡去定義 ListView 的 item 被點擊時要做的動作。
我們今天要對 ListView 的 item 定義偵聽式的動作,所以該偵聽式的名稱也很直覺,就叫 setOnItemClickListener,先來看一下這個偵聽式的結構
AdapterView.OnItemClickListener adapterClick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//要執行的事情
}
};
在這個偵聽式裡面有四個參數:
1.AdapterView<?> parent
被點擊 item 的母元件,也就是 ListView。
2.View view
被點擊 item 的本身。
3.int position
被點擊 item 的位置,白話一點,就是第幾個 item 被點到。
4.long id
被點擊 item 的 id。
接下來我們就直接來看看,要如何加入 Moogle5 中 listview 的動作吧。我們今天要做的動作很簡單,將被點擊到的 item 引導到該角色的介紹連結,所以請先到 strings 裡面下面這個字串陣列
<string-array name="link">
<item>http://finalfantasy.wikia.com/wiki/Sephiroth_(Crisis_Core_Boss)</item>
<item>http://finalfantasy.wikia.com/wiki/Kefka_Palazzo</item>
<item>http://finalfantasy.wikia.com/wiki/Exdeath_(Boss)</item>
</string-array>
再來到 Moogle5Activity 裡宣告 listview 物件
ListView lvMoogle5 = getListView();
lvMoogle5.setOnItemClickListener(adapterClick);
因為我們 Moogle5 已經"化身"為 ListActivity,所以這裡的 ListView 物件,不似以前要用 (ListView)findByViewById(R.id.xxx)這樣的寫法,而是直接用 getListView() 來取得介面上被命名為"@id/android:list",還記得嗎?在介面裡的這個寫法,是取得已被命名的id,也就是系統預設好的名字,所以從這個角度再看回到程式碼上,就是這樣,我們也才能夠用 getListView() 的方式取得這個資源。
這邊也已經給予偵聽式的名稱了,所以再來就來看看偵聽式的內容吧!
AdapterView.OnItemClickListener adapterClick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String[] links = getResources().getStringArray(R.array.link);
Uri uri = Uri.parse(links[position]);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
};
一樣要先取出剛剛定義在字串陣列裡的"網址群",再來的 uri 是定義我們要前往的網址內容,所以這邊的網址陣列也是要注意到對應的順序哦!再來就是 Intent 的應用啦!在這裡可以看到,intent不是只能從自己轉移到另外一個 activity,同時也"串接"到本身 app 外的世界,以這個範例來說,執行到 startActivity 的時候,Android 會為我們開啟瀏覽器,並前往 uri 設定的網址去!
以上,我們今天的源始碼就到此為止嘍!
接著,再為各位介紹幾個 intent 的延伸
1.電話
Uri uri = Uri.parse("tel:0987654321");
intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
這邊會幫我們引導到打電話的介紹,同時會我們填入該電話號碼,只待我們按下撥號按鍵即可。
2. Google Map
Uri uri = Uri.parse("geo:25.04792,121.51709");
intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
上面的座標是臺北車站的。
3.YOUTUBE
Uri uri = Uri.parse("vnd.youtube:T_Te2yHs6gI");
intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
youtube冒號後面是youtube影像的 id,那個 id 可以看從網址列取得,以這邊這個例子來說:https://www.youtube.com/watch?v=T_Te2yHs6gI&feature=watch_response
就是指?後面,從 v= 到 & 之間的字串
本篇是鐵人賽的最後一篇,自己是第一次參加,感覺還頗有趣的,其實 Android 的元件跟設定還相當多,這卅天為各位帶來的這些東西,只能說是常用功能的一部份,而範例的部份除了趣味外,也希望這樣的方式讓各位能夠三不五時地複習前一兩天所介紹的東西,加強印象,就是不知道大家的感覺如何呢?
而最後帶給各位的這個範例與介紹,也帶點寓意,希望各位在 Android 的世界中能夠可以像是 Intent 這樣,得以跟很多應用做"串連",延伸自己的觸角,發光發熱!祝福各位^_^
所有程式碼就可以在 Mosil's GitHub 取得哦!
未來仍會不定期地方發文在自己的部落格裡,再請各位多多指教嘍
雖然開發 Android 的學問很深
但 mosil 大大在 30 天的時間中
做了一番深入淺出的介紹
對於想入門的邦友而言
是很不錯的值得一看的系列文章
而我自己
也趁這次機會學到了不少
在此祝賀鐵人鍊成
並成為大奬侯選人
放煙火
謝謝支持
可惜後來沒再看到海棉大大的作業了
因為我不是有鋼鐵般意志的鐵人
我是海綿
iT邦幫忙MVPantijava提到:
對於想入門的邦友而言
是很不錯的值得一看的系列文章
真是太中肯了,再認真看完一次這30篇,讓我更有信心動手玩創意,讚啦!