1. 程式人生 > >GridView設定Item的點選事件無效的解決方案

GridView設定Item的點選事件無效的解決方案

背景

介面顯示用到了gridview,然後gridview的item的itemView是一個簡單的Button。當gridview設定完adapter後,接著設定item的點選事件時發現點選item是不能觸發下面的方法。

// gridview的item的點選事件
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int
position, long id) { Log.e("onItemClick", entities.get(position).getNumber()); Toast.makeText(MainActivity.this, entities.get(position).getNumber(), Toast.LENGTH_LONG).show(); } });

當我點選gridview中的一個子項後,並不能在控制檯上看到任何的資訊列印,也不吐絲。表明該方法沒有觸發。

問題導原因

因為itemview中的button導致,該控制元件是可點選的會遮蔽gridview的item點選事件。具體的原因這裡就不做過多的說明了,網上很多導致該問題的原因說明

解決方案首先在你的itemview的根佈局新增屬性:
android:descendantFocusability="blocksDescendants"
然後設定itemview中可點選控制元件的clickable屬性為false如下:
android:clickable="false"

問題解決圖示

這裡寫圖片描述

上面的圖示說明觸發了gridview的item點選事件,問題得到了解決。

補充說明

這裡有一點需要額外的說明,如果你用的是自定義的view繼承了gridview然後實現一些額外的操作的時候。如果你重寫了onTouch方法的時候,記住返回的值別做改動,就返回父類的方法即可。因為有的人喜歡返回true,然後會導致即使你的itemview做了上述的變動,你還是不能夠觸發item的點選事件。為什麼呢?你點父類的方法進去可以看到父類做了一些其他的實現,並不是單單的返回true或者false而已,所以就用預設的就好。

================================================================

A little bit of progress every day!Come on!

相關推薦

popupwindow中ListView item事件無效解決方案

在Popupwindow中佈局ListView後,如果popupwindow的focusable設定為false 的話,ListView的item的點選事件 出現如下情況: API < 19 :onItemClick 事件無效 API >=19:

【android】事件穿透解決方案

在一個佈局中使用了FrameLayout,將佈局分為上下兩層,結果在操作上層佈局空白處時,觸發了下層佈局按鈕的點選事件,解決方法如下: 在上層根佈局新增如下屬性即可 android:clickable

GridView設定Item事件無效解決方案

背景 介面顯示用到了gridview,然後gridview的item的itemView是一個簡單的Button。當gridview設定完adapter後,接著設定item的點選事件時發現點選item是不能觸發下面的方法。 // gridview的i

Android-RecyclerView-Item事件設定

轉載請註明出處:http://write.blog.csdn.net/postedit/40423361 在上一篇部落格Android-RecylerView初識中提到,RecyclerView不再負責Item檢視的佈局及顯示,所以RecyclerView也沒有為Item

TextView 事件無效的完美解決

最近在開發中遇到這麼一個問題,當使用TextView做成Button的點選事件時(在xml中使用android:onClick="click"屬性設定該TextView的點選方法),點選失去效果,不能

RecyclerView Item事件實現 類似GridView

RecyclerView Item點選事件實現,請看程式碼 package sample.mars.com.androidutsample.view; import android.conten

listview的item裡面有Button,並給其設定事件,而且有效可,但是listview的item事件卻失效了

問題:listview的item裡面有Button,並給其設定了點選事件,而且有效可點選, 但是listview的item點選事件卻失效了 解決方案一,測試有效:android:descendantF

自定義SwipeRefreshLayout 巢狀listview 並解決item事件焦點衝突問題

最近專案需要實現上拉載入更多,為了不引入第三方庫,可以使用自定義SwipeRefreshLayout 來實現,作品摘自 簡書:http://www.jianshu.com/p/d23b42b6360b但是在使用的時候發現有個bug,就是當頁面顯示最後一條資料的時候 ,lis

GridView事件衝突解決

      在開發的時候,經常可能遇到ListView或GridView原因是Item佈局中的button或ImageButton強制獲取了item的焦點,解決方式之一是:只要設定Item佈局中的bu

AutoCompleteTextView 設定事件需要兩下解決辦法

今天用AutoCompleteTextView 設定了點選事件為了使其彈出提示內容,但是發現需要點選兩下才會觸發OnClick事件。 在網上找到了一個辦法是換成OnTouch方法, 在Android中,onClick、onLongClick的觸發是和ACTI

Recyclerview或Listview實時重新整理,item事件失效的解決方法

問題場景: 本人最近在做一個關於藍芽開發的Demo,在掃描藍芽裝置的時候會產生回撥,並會返回BluetoothDevice和rssi,這個rssi就是掃描到的這個裝置的訊號。 注意,這個回撥不是搜尋到1個裝置後就只回調一次這個裝置,而是隻要掃描到了就會回

解決DialogFragment中自定義佈局的按鈕事件無效

在DialogFragment中如果有時會突然發現我們寫的自定義佈局的點選事件無效,如果寫在onCreateView()方法中,如果又重寫了onCreateDialog()方法,建議把控制元件的初始化和

Web丨IOS系統下Safari瀏覽器中div事件無效解決辦法:

1、把 div 改換為 a、button 等具有可點選性的標籤元素,新增 curson:pointer 滑鼠樣式 2、把點選事件直接繫結到需要點選的標籤上,而不是其祖先級,儘量不要用事件委託 曾在兩個專案中適配 IOS 手機端 Safari 瀏覽器時遇

解決ListView中Item的子控制元件(比如Button)與Item事件衝突

經常會碰到在ListView中點選其中一個Item,會一併觸發其子控制元件的點選事件,例如Item中的Button、ImageButton等,導致了點選Item中Button以外區域也會觸發Button點選事件。在網上找了相關方法,這裡記錄下,親測可行.. 1、在Item

UIView新增手勢 然後UITableView 新增進這個View 導致UITableView 的單元格事件無效

#pragma -mark UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)tou

RecyclerView條目item事件---放大

Adapter–建立介面 //建立介面 public interface RecyInterface{ void vh(Viewholder viewholder); } //宣告介面名 private RecyInterface mRec

ScrollView與viewpager滑動事件衝突,與事情衝突解決方案

在產品適配的時候我加了ScrollView,但是產品提出了一個向上輪播需求 首先把豎直向上的viewpager粘出來: package com.cfiigroup.zhehui.hepaidai.view; import android.view.MotionEvent; impo

swiper輪播圖包在div(tab切換)下js上一頁下一頁事件失效解決辦法

問題:    兩種解決辦法: 解決辦法一: var mySwiper = new Swiper ('.swiper-container', { nextButton: '.swiper-button-next', p

jQuery繫結動態元素的事件無效

示例如下: <div> <ul id="demo"> <li>Kubernetes:下一代分散式系統的護戒使者</li> <li>機器學習工具--Pandas cheat sheet</li> <li&g

RecyclerView的Item事件,增加刪除Item瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局、實現新聞頻道選擇器

RecyclerView的Item點選事件的實現,增加和刪除Item使用瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局的實現使用、RecyclerView去實現今日頭條新聞頻道選擇器。 使用ItemTouchHelper實現Item的拖動交換,由於Recy