2015-03-31 26 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

相关问题