Android.GridView事件監聽
可能是因為一直在做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來獲取到使用者點選的是哪個圖片,然後根據這個圖片進行相應的跳轉。
相關文章
- 事件監聽事件
- Flutter事件監聽Flutter事件
- jQuery事件監聽jQuery事件
- 監聽滑鼠事件事件
- JavaScript 事件監聽JavaScript事件
- js 監聽事件JS事件
- 事件和事件監聽器事件
- vue之監聽事件Vue事件
- 監聽鍵盤事件事件
- 初識事件監聽事件
- JS事件監聽器JS事件
- deleted事件監聽報錯delete事件
- 如何移除事件監聽器事件
- Laravel 中的事件監聽Laravel事件
- passive 的事件監聽器事件
- 鍵盤監聽事件--向左事件
- java 自定義監聽事件Java事件
- javascript監聽鍵盤事件JavaScript事件
- springboot事件監聽Spring Boot事件
- 監聽所有模型的 saved 事件模型事件
- 如何監聽SAP CRM BOR事件事件
- java 監聽 redis 過期事件JavaRedis事件
- h5 storage事件監聽H5事件
- Spring Boot 事件和監聽Spring Boot事件
- Event-Listerner事件監聽模式事件模式
- JS的事件監聽機制JS事件
- java springboot監聽事件和處理事件JavaSpring Boot事件
- Spring事件釋出與監聽Spring事件
- vue 監聽頁面滾動事件Vue事件
- 透過觀察者監聽模型事件模型事件
- 通過觀察者監聽模型事件模型事件
- Apache ZooKeeper - 事件監聽機制初探Apache事件
- 模型deleted事件監聽報錯解析模型delete事件
- Tomcat指定應用事件監聽Tomcat事件
- 統一監聽所有模型的模型事件模型事件
- 使用 vue 例項更好的監聽事件Vue事件
- 監聽瀏覽器的後退事件瀏覽器事件
- thinkphp6事件監聽event-listenePHP事件