2014-02-27 35 views
0

所以我目前有一個ListView,它有很多列表項。例如,每個列表項都有兩個視圖,分別爲View1View2,並且有一個長按聽衆。默認情況下,View2被隱藏,直到在列表項上檢測到長按。值得注意的是,我希望只有一個列表項目同時顯示View1View2。其餘列表項目只應顯示View1。我將如何實現這一點?Android:確保列表視圖中只有一個列表項被擴展

我想跟蹤列表項的ID應該顯示在ListFragment和適配器的getView方法內部兩種意見的,我會檢查我加載項是否應顯示View2。這是做這件事的好方法嗎?另外,一旦檢測到長按,我是否應該抓住所有可見單元並更新每個單元的可見性View2

有沒有更好的解決方案呢?

回答

0

我想到兩種可能性:

1)在你的類中有一個變量'currentItem'。在longClick上刷新你的列表視圖(例如,在適配器上使用notifyDataSetChanged()),強制它重畫當前屏幕上的項目,並且除'currentItem'之外的所有項目都被隱藏2)有一個變量'lastSelectedItem '在你的班級。在longClick你做這樣的事情(在僞代碼)

currentSelection = // ... item returned from onLongClick 
item(lastSelectedItem).hideView(); 
item(currentSelection).showView(); 
lastSelectedItem = currentSelection; 
+0

我有一個關於這個問題的唯一問題是,獲得該項目的觀點可能不是最初該項目的考慮名單回收他們的意見之一。對於你的第一個解決方案來說,刷新視圖意味着什麼? – bph

+0

我編輯了答案。另外,由於回收機制,第二種方法可能會更棘手,但是它仍然可行。如果先前選擇的項目是**回收或不**,則無論如何都隱藏視圖。 – Merlevede

+0

當長按發生時,這是正確的。但是,當我開始滾動並且視圖被回收時,我將在哪裏存儲View2的可見性? 感覺好像跟蹤長按項目的項目ID幾乎比較容易,並且每次都在getView中進行比較。然後,每當另一件物品被壓抑時,我只是notifydataset改變。我會試試這個 – bph