0

這是處理ListView中onItemClick事件中視圖的最佳做法的請求。使用ListView和複雜佈局處理onItemClick事件

我的ListView中的每個視圖都包含一個ImageView,一些TextViews和一個包裹在RelativeLayout中的複選框。在任何地方選擇的項目視圖上,我希望根據需要勾選/取消選中複選框。我還想要選擇更改視圖樣式,即通過着色筆畫突出顯示項目。

我目前的問題與其他人一樣。由於ListView的回收,如果我抓取傳遞給onItemClick的視圖並設置背景資源或複選框選中的值,它也會更改當前未呈現的視圖。我想知道實現這一目標的最佳方式。

我知道有一種模式可以通過實現onClickListener直接處理ArrayAdapter中的CheckBox事件,但我相信這隻會響應直接選擇CheckBox;它會忽略對視圖其餘部分的任何點擊。另外,如果CheckBox onClick事件被觸發,它將消耗點擊事件,因此onItemClick不會觸發,我需要設置我的數據。

此外,使用CheckedTextView將不起作用,因爲它位於RelativeLayout內,它不會將選中的事件傳遞給ListView。有一個帖子建議創建自己的CheckedViewLayout,它實現了Checkable來處理View checked事件。如果我繼續這樣做,是否可以在XML中引用我的新佈局類,還是必須再次設計我的每個視圖,但使用Java代碼?

如果其他人有更好的解決方案,請讓我知道。

+0

如果是真的,只改變當前位置的BG http://stackoverflow.com/questions/12051813/android-listactivity-oncheckedchangelistener/12052585#12052585通過@Mit布哈特 –

+0

鑑於答案會爲你工作,OnItemClick和chkbox onClick將工作,因爲他們使用Chkbox點擊查看持有人類像holder.name.setOnClickListener。(在AdpterView)所以它一定會解決您的問題。 – MDroid

+0

MDroid,它不會。看到我的迴應。請記住,我也有一個ImageView。這實質上是一個手機聯繫人ListView。 –

回答

0

最後,我創建了自己CheckableRelativeLayout是實現可檢查,並用它作爲主容器每個ListView項目。我在CheckableRelativeLayout中使用了一個布爾值來跟蹤視圖是否被點擊。

如果需要,我可以發佈最後一堂課。

1

嘿,我覺得這個鏈接可能對你有用,有一個細節你

Android ListView Checkbox Example - OnItemClickListener() and OnClickListener()

+0

即使你將OnClickListener附加到複選框,你是說onItemClick仍然會啓動嗎?此外,複選框只是我佈局的一小部分。我希望能夠在視圖中的任何位置選擇,而不僅僅是複選框。 –

+1

試試這個代碼一次..!它在我身邊工作,你說因爲相對佈局有問題,他們使用相對佈局,! –

+0

好的,但這隻會處理CheckBox上的點擊事件。如果我點擊TextView,它不會工作,對吧? –