Android.GridView事件監聽

瓜瓜東西發表於2014-03-24

可能是因為一直在做Web的緣故吧,總會把Web的思想帶到Android上來。Web控制元件是非常強大的,我曾經跟我一個朋友(從事Android開發的)訴苦:“怎麼Android上連一個像樣Select都沒有呢?只有Text,卻不能給它ID,直接獲取到使用者點選的索引index,然後還要手動從資料中讀該索引的ID值。這也未免不過弱小了吧?”我朋友說:“這是嵌入式,你以為是什麼啊~~~哪有這麼強大的功能,有的話就要自己再做一層封裝。體諒一下吧。”呵呵,是的,我們在做的是嵌入式手機應用系統開發。越底層,現成的功能就越少。

就像這篇文章要提到的GridView的事件監聽,題目雖是事件監聽,但是我這裡要介紹的關鍵不在於怎麼實現事件監聽,因為實現事件監聽對於一個有基礎的朋友來說,應該都懂。先看下面的程式碼:

GridView gridView = (GridView) findViewById(R.id.homeGrid);//獲取GridView

gridView.setOnItemClickListener(this);//設定事件監聽

// 初始化圖片陣列和文字陣列
Integer[] images = new Integer[]{ R.drawable.shoppingcart1,
R.drawable.shoppingcart2, R.drawable.shoppingcart3,
R.drawable.shoppingcart4, R.drawable.shoppingcart5,
R.drawable.shoppingcart6, R.drawable.shoppingcart7 };

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int idx, long arg3) {
// TODO Auto-generated method stub
switch (images[idx]) {
case R.drawable.shoppingcart1:
startActivity(new Intent(this, ChoiceCarActivity.class));//啟動另一個Activity
finish();//結束此Activity,可回收
break;
default:
break;
}
}

上面是這一篇文章要介紹的全部程式碼,程式碼很簡單。我要說明的關鍵點只有一個,大家看看OnItemClick()方法。這是一個事件的回撥方法。跟OnClick事件不一樣的事,OnClick事件傳進來的是一個View,也就是使用者點選的控制元件物件,根據這個View就可以判斷使用者點選了哪個物件。但是在GridView裡面,因為使用同一個模板,所以無論點選哪一個格子,返回的View幾乎是同一個,Id也一樣。哪如何解決呢?

請各位留心一下,OnClick和OnItemClick(),不同的是多了一個Item,這個事件一般會用在GridView和ListView這類控制元件中,因為這些控制元件都是由多個Item組成的,都需要給他們設定Adapter。所以OnItemClickListener是在AdapterView包下,而OnClickListener是在View包下。所以在使用GridView和ListVIew這類控制元件時,要注意監聽的是OnItemClick事件,而非OnClick事件。

從上面的程式碼可以看出,OnItemClick方法有四個引數傳進來。到底是一些什麼引數呢?

第一個引數AdapterView,這個我也沒測試出來,估計就是我們加進去的那個Adapter,就是上一篇文章所提到的SimpleAdapter。在這裡作用不大。

第二個引數View,這個應該就是點選位置的控制元件,但是我的GridView中不只是一個控制元件啊,所以這個控制元件作用也不大。

第三個引數int 型別的index。這個是最重要的,這裡返回的是GridView被點選的格子的索引。

第四個引數long型別的index。這個我測試的時候,發現跟第三個引數是同一個值的,至於他們有什麼區別呢?我還沒深入到。唯一不同的是一個是int,另一個是long。但是我相信他們應該存在更大的區別,因為暫時沒有獲取到原始碼,所以無法深入理解。這個暫時擱淺。

從上面的介紹可以看出,第三個引數才是我們所需要的。也就是說,當使用者點選一個格子的時候,我們只需要獲取這個格子的索引,然後根據我們填充格子的資料來源(陣列)來獲取該位置的對應資料。比如說,上面的圖片陣列就是一個資料來源,我可以根據這個index來獲取到使用者點選的是哪個圖片,然後根據這個圖片進行相應的跳轉。

相關文章