1. 程式人生 > >Android中ListView點選事件失效的解決辦法

Android中ListView點選事件失效的解決辦法

今天的第二篇部落格了,每一篇都只為了記錄我所做專案中遇到的一些問題。

現在我所做的專案是這樣的:我做了一個讀取手機通訊記錄的介面,使用了ListView控制元件,在ListView的item中添加了一個按鈕。程式碼編寫完成後,經過模擬器執行,發現ListView的setOnItemClickListener()方法失效。

首先我懷疑是我在增加功能時不小心刪去或修改了使點選事件正常的程式碼,但是經過檢查,發現程式碼正確無誤。

經過查詢資料,搜尋百度、部落格等前輩的經驗,發現了疑點。

我修改了item中的一個屬性的設定。

修改之前的程式碼是這樣的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<RelativeLayout/>
修改後的同一段程式碼是這樣的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    <span style="color:#FF0000;">android:descendantFocusability="blocksDescendants" </span>>
<RelativeLayout/>

         為什麼會出現ListView的item點選事件的失效呢?

我在這裡淺顯的理解為:如果ListView的item中包含了button等同樣需要點選事件監聽的控制元件時,系統在預設情況下使item中的事件監聽的控制元件獲取焦點,使ListView失去焦點,導致無法響應setOnItemClickListener()方法。

        那麼新增的這個屬性是什麼意思呢?

descendantFocusability屬性是當一個view獲取焦點時,定義viewGroup和其子控制元件之間的關係。該屬性的值有三種:

beforeDescendants:viewGroup會優先其子控制元件而獲取到焦點。

afterDescendants:viewGroup只有當子類控制元件不需要獲取焦點時才獲取焦點。

blocksDescendants:viewGroup會覆蓋子類控制元件而直接獲取焦點。

根據我要實現的效果,我要忽略子類控制元件即當前item中的button直接獲取item焦點,因此我選用了第三個屬性值。

在解決上述問題時參考了下面的文章,讀者可以點選直接檢視:


相關推薦

AndroidListView事件失效解決辦法

今天的第二篇部落格了,每一篇都只為了記錄我所做專案中遇到的一些問題。 現在我所做的專案是這樣的:我做了一個讀取手機通訊記錄的介面,使用了ListView控制元件,在ListView的item中添加了一個按鈕。程式碼編寫完成後,經過模擬器執行,發現ListView的setOn

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

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

Android ListviewButton按鈕事件衝突解決辦法

 今天做專案時,ListView中含有了Button元件,心裡一早就知道肯定會有衝突,因為以前就遇到過,並解決過,可惜當時沒有記錄下來。 今天在做的時候,繼續被這個問題鬱悶了一把,後來解決後,趕緊來記錄下,以便日後參考。   首先,其實Listview中Button按

ListView事件失效(item裡面有button按鈕控制元件)解決方法

ListView點選事件失效解決方法: 一般出現這個情況,就是你的item裡面有按鈕的點選事件,你的item裡面有button控制元件,button控制元件是搶佔焦點的,只要在你的item佈局裡面這樣子寫就可以了: &l

Android-listview新增控制元件導致listview事件失效

今天寫了個demo,dialog自定義佈局添加了個listview,listview  item裡面加了個checkBox,需求checkBox在列表裡有單選的效果:測試的時候需要點選item也改變checkBox的選中狀態,然而listview的點選事件失效了。後來發現是失

ListView事件失效解決方案

在寫ListView的點選事件時OnItemClickListener,onItemClick方法沒有執行,導致ListView條目點選事件失效,檢查發現百度上有很多不同的答案,但究其本質都是Lis

iOS Safari click事件失效解決辦法

問題起因: 在微信公眾號開發(微站)過程中用jquery的live方法繫結的click事件點選無效(不能執行) 問題描述 當使用委託給一個元素新增click事件時,如果事件是委託到 document 或 body 上,並且委託的元素是預設不可點選的(如 div, s

Android 控制元件使用Animator動畫後,事件失效解決方法

原因:動畫只是改變了該控制元件的顯示位置; 實際位置未發生改變 解決方法: 使用ValueAnimator動畫 屬性動畫 /** 獲得value物件.通過構造器 並且 傳遞 需要移動的引數

AndroidListViewonItemClick不響應,onTouch和onItemLongClick響應

這裡先說以下原因,我這裡的ListView不能點選,可能是跟執行緒更新UI有關,與獲取焦點之類無關。 程式裡的ListView設定了點選監聽setOnItemClickListener,長按監聽setOnItemLongClickListener,觸控監聽setOnTouchListener。

Android 螢幕事件的實現

在android下,事件的發生是在監聽器下進行,android系統可以響應按鍵事件和觸控式螢幕事件,事件說明如下: 常用實現OnClickListener,OnTouchListener,OnFocu

TableView cell的選中事件 與手勢事件 衝突解決辦法

三步曲 1、遵守UIGestureRecognizerDelegate協議 2、給手勢觸發動作新增代理  程式碼如下 UITapGestureRecognizer *hideTap = [[UITapGestureRecognizer alloc]initWithTarge

ionic開發——百度地圖InfoWindow資訊視窗上新增按鈕,無法觸發事件問題解決辦法

ionic開發中,在使用百度地圖的時候,有時我們需要在點選地圖上標註的海量點彈出一個infowindow的資訊視窗,自定義資訊視窗的內容後,我們想要可以在資訊視窗上面點選的時候,發現點選沒有效果。 我

Tap手勢與UITableView事件衝突解決辦法

  在我們的開發過程中經常會遇到點選頁面回收鍵盤的需求,當然這個很好解決。   在我們的開發過程中也會遇到點選某一選項之後回收列表,這個也很容易實現。   那麼,問題來了,當這兩個碰到一起怎麼辦呢,你可以按照正常的程式碼去寫,但是,當你點選的時候你會發現,並沒有出現你預期要

android 事件分發,解決由於listview實時重新整理,導致子view事件失效

近期由於個人的某些因素作怪,導致沒有很好地總結和積累,主要是最近一段時間,大多數接觸的都是第三方的sdk ,在一些介面問題上造成了很多困擾,很是麻煩,並且說明文件也不詳細,所以每每遇到一些問題都要等待很久才能解決。 好了,廢話不多說了。下面開始今天的

textview 處理spannable使得ListView事件失效解決方法

import android.content.Context; import android.text.Html; import android.text.Layout; import android.text.Selection; import android.tex

Android那些事》——ListViewButton事件解決方案

    說一說寫這篇文章的原因,最近在做一個專案,有涉及到使用者回覆的功能     遇到的其中一個問題就是,如何為ListView中的Button設定點選事件?     在此將解決方案分享給大家

android listview系列之item的事件及item佈局事件(四)

很多時候listview只顯示簡略資訊,我們需要點選子項去跳轉或在顯示詳細資訊的位置,將相關的詳細資訊顯示出來,listview提供了onItemClickListener()方法,在方法中我們可以執行我們需要的內容。 listview.setOnItem

android用webview載入H5頁面出現事件失效的問題解決

不論點選還是標籤連結都失效,反覆查閱,可能性方法試了又試最終解決。總結下:1.開啟js支援2.webview 設定WebChromeClient3.websetting和webviewclientimport android.os.Bundle; import androi

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

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

listview增加checkbox導致item事件失效

這時候就可以使用descendantFocusability來解決啦,API描述如下: android:descendantFocusability Defines the relationship between the ViewGroup and its descendants when loo