日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android ListView不响应OnItemClickListener解决办法

發(fā)布時(shí)間:2025/3/13 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ListView不响应OnItemClickListener解决办法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有時(shí)候,當(dāng)ListView中的每一個(gè)item是自定義的View時(shí),有可能會(huì)導(dǎo)致ListView的OnItemClickListener的listener無法調(diào)用,請(qǐng)看如下情況:

如果你的自定義ListViewItem中有Button或者Checkable的子類控件的話,那么默認(rèn)focus是交給了子控件,而 ListView的Item能被選中的基礎(chǔ)是它能獲取Focus,也就是說我們可以通過將ListView中Item中包含的所有控件的 focusable屬性設(shè)置為false,這樣的話ListView的Item自動(dòng)獲得了Focus的權(quán)限,也就可以被選中了。

我們可以通過對(duì)Item Layout的根控件設(shè)置其android:descendantFocusability="blocksDescendants"即可,這樣Item Layout就屏蔽了所有子控件獲取Focus的權(quán)限,不需要針對(duì)Item Layout中的每一個(gè)控件重新設(shè)置focusable屬性了,如此就可以順利的響應(yīng)onItemClickListener中的onItemClick()方法了。

總結(jié):?

原因:

ListView中的Item內(nèi)部的View獲得了焦點(diǎn),如Button, Checkbox等。?

解決辦法:?

不要讓ListView中的Item內(nèi)部的View獲得焦點(diǎn)就OK了,這樣做:android:descendantFocusability="blocksDescendants"

public static final int descendantFocusability

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.

?

ConstantValueDescription
beforeDescendants0The ViewGroup will get focus before any of its descendants.
afterDescendants1The ViewGroup will get focus only if none of its descendants want it.
blocksDescendants2The ViewGroup will block its descendants from receiving focus.

?

注意:
還有一種情況也會(huì)導(dǎo)致OnItemClickListener或OnItemLongClickListener回調(diào)不會(huì)執(zhí)行,那就是ListView的child設(shè)置了onClickListener或onLongClickListener。我們可以通過源代碼看出,在你調(diào)用setOnClickListener()方法后,它會(huì)調(diào)用setClickable(true),在onTouchEvent里面的實(shí)現(xiàn)如下:?

?

[java]?view plain?copy
  • if?(((viewFlags?&?CLICKABLE)?==?CLICKABLE?||??
  • ????????????????(viewFlags?&?LONG_CLICKABLE)?==?LONG_CLICKABLE))?{??
  • ??
  • ????//?....??
  • ??
  • ????return?true;??
  • }??
  • ?

    當(dāng)一個(gè)View在onTouchEvent里面返回true后,ListView就不會(huì)正常接收到事件。

    轉(zhuǎn)載于:https://www.cnblogs.com/exmyth/p/5387153.html

    總結(jié)

    以上是生活随笔為你收集整理的Android ListView不响应OnItemClickListener解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。