多是由於一直在作Web的緣故吧,總會把Web的思想帶到Android上來。Web控件是很是強大的,我曾經跟我一個朋友(從事Android開發的)訴苦:「怎麼Android上連一個像樣Select都沒有呢?只有Text,卻不能給它ID,直接獲取到用戶點擊的索引index,而後還要手動從數據中讀該索引的ID值。這也未免不過弱小了吧?」我朋友說:「這是嵌入式,你覺得是什麼啊~~~哪有這麼強大的功能,有的話就要本身再作一層封裝。體諒一下吧。」呵呵,是的,咱們在作的是嵌入式手機應用系統開發。越底層,現成的功能就越少。 數組
就像這篇文章要提到的GridView的事件監聽,題目雖是事件監聽,可是我這裏要介紹的關鍵不在於怎麼實現事件監聽,由於實現事件監聽對於一個有基礎的朋友來講,應該都懂。先看下面的代碼: ide
GridView gridView = (GridView) findViewById(R.id.homeGrid);//獲取GridView 測試
gridView.setOnItemClickListener(this);//設置事件監聽 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來獲取到用戶點擊的是哪一個圖片,而後根據這個圖片進行相應的跳轉。