2015-03-31 24 views
1

我正在使用自定義的SimpleOnGestureListener來檢測長按和單擊,並在我的ListView上實現了它,它有一個選擇器。使用ChoiceMode設置選擇器列表視圖multipleChoice

現在,我開始一個上下文動作模式,當列表中的一個項目被長時間按下,然後每次調用singleTapUp時,我會將項目索引添加到一組選定的項目中。我也使用了非常基本的集合來實現切換邏輯。

雖然切換,我也檢查,如果該索引是從ListView控件調用

getCheckedItemPositions() 

映射到稀疏布爾數組我得到一個布爾值。如果該指數是不是在選定的項目我添加它並調用

listView.setItemChecked(index, true) 

否則我從集合中刪除它,並呼籲

listView.setItemChecked(index, false) 

現在我的問題是啓動操作模式回調時的第一個項目長按不能保持其激活的背景,而我之後點擊的所有後續項目都會執行。

我還觀察到,如果我不叫

setItemChecked() 

明確的話,我必須長按爲它保留了激活的背景和單單擊項目並沒有改變的背景每個項目。

有人能幫我找出一個乾淨的方法來做我想做的事嗎? 任何幫助將不勝感激。

下面是我使用的選擇--->子項的

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:state_activated="true" 
     android:drawable="@drawable/blue_highlight"/> 

    <item android:state_activated="false" 
     android:drawable="@drawable/plank_idle"/> 

</selector> 

回答

0

好吧,最後很多撓頭的轉Ø後這是一個糟糕的設計案例,所以我想我會發布答案,以防其他人不小心做錯了。

我不應該使用SimpleOnGestureListener來檢測OnSingleTapUp()和onLongPress()這些基本事件,它們的替代方案分別在AdapterView類中分別找到,它們分別是OnItemClickListener()和OnItemLongClickListener()。

使用這些監聽器,狀態由AdapterView有效處理,問題從未出現。

0

紮根佈局,框架佈局,並設置其屬性爲

機器人:前景=「機器人:ATTR/activatedBackgroundIndicator」

這就是工作F9我

+0

仍然不會更改行爲,第一個啓動操作模式的項目不保留激活的背景,但後續項目在單擊後會保留它。即使我長時間按下每個項目,激活的背景也不會被任何一個人保留。 – trpride 2015-03-31 13:22:02

相關問題