カスタムの SimpleOnGestureListener を使用して長押しとシングルタップを検出し、それをセレクターを持つ ListView に実装しています。
ここで、リスト内のアイテムが長押しされたときにコンテキスト アクション モードを開始します。その後、singleTapUp を呼び出すたびに、選択したアイテムのセットにアイテム インデックスを追加します。また、非常に初歩的なセットを使用してトグル ロジックを実装しました。
切り替え中に、そのインデックスが、呼び出しから取得したスパースブール配列のブール値にマップされているかどうかも確認します
getCheckedItemPositions()
リストビューで。インデックスが選択したアイテムにない場合は、追加して呼び出します
listView.setItemChecked(index, true)
それ以外の場合は、セットから削除して呼び出します
listView.setItemChecked(index, false)
今私の問題は、長押ししたときにアクションモードのコールバックを開始する最初のアイテムがアクティブ化された背景を保持しないのに対し、その後にクリックするすべてのアイテムが保持されることです。
また、電話しないと
setItemChecked()
明示的に、アクティブな背景を保持するにはすべてのアイテムを長押しする必要があり、アイテムを1回クリックしても背景は変更されません。
誰かが私が達成したいことをするためのクリーンなアプローチを理解するのを手伝ってくれますか? どんな助けでも大歓迎です。
これが私が使用しているセレクターです --->
<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>