android中ListView是一個經常要用到的一個組件,用到該組件時經常會碰到ListView的Item和Item中的Button不能單擊的問題。
本人在使用時同樣也遇到過這樣的情況,共有三種情況,總結如下:
情況一:焦點問題: 設置android:descendantFocusability="blocksDescendants"> 和android:focusable="false"
該情況比較常見,在網上都可以搜索到相關的解決辦法,不在這過多的介紹,先給出我以前總結的方法的連接。
http://blog.csdn.net/competerh_programing/article/details/8028764
情況二:由Listview的android:layout_height="wrap_content"引起。
此類情況完全是由Listview的android:layout_height="wrap_content"引起,修改成一個確定的值就可以解決。詳細的請看以下連接
http://blog.csdn.net/competerh_programing/article/details/7731599
情況三:通過Handler適時更新listview的適配器引起
這是我最近才遇到的一種情況:在前面的兩種情況都解決的情況下,我的listview沒有出現單擊item或button不響應的現象。
現在是要做出這樣的效果,單擊item后讓其顯示高亮,我在listview的適配器中加了一個整形參數標志選中的item並讓其背景色高亮,然后再item單擊事件中傳入該參數,並通過消息隊列通知Handler讓Listview的adapter更新數據后選中的itme則顯示高亮。
這樣做以后,就導致了如下情況:item一直可以單擊響應,在item單擊幾次后在單擊button,button沒有了響應,再單擊item或其他button,則觸發出之前沒有響應的單擊事件。
然后嘗試各種單擊后,設置item不能獲取焦點,都不管用。最后發現只有將handler中listview的adapter數據更新注銷掉才解決。
其中的緣由還未找到,現共享給大家希望能幫到各位,麻煩知道的大蝦可以給出解釋。
情況三的解決辦法:今天又碰到與三類似的情況,這次逃避不了,只有硬着頭皮解決。我仔細看看了代碼,用Handler更新Listview內容代碼的:
noticeAdapter.setInfoList(noticeList);
noticeAdapter.notifyDataSetChanged();老覺着不對勁,然后再加了一句lvNotice.setAdapter(noticeAdapter);調試通過,問題解決。
之前在handler中更新listview后一直都保留setAdapter(noticeAdapter)后來刪除發現也沒什么影響。現在問題出現了希望給大家以提醒。
最后說明一下,我遇到是屬於第二種情況 把Listview的android:layout_height="wrap_content"改為fill_parent 就好了。
