0

我有一个由定制的 ArrayAdapter 支持的 ListView,其中每个项目都有 2 个 LinearLayouts - 一个我称为 head,另一个称为 body。正文被隐藏(消失),直到用户单击它滑出的行。第二次点击(在头部)将隐藏身体。但是,如果用户点击身体,它会带来另一个活动。所有这些都很好,问题来了:

当用户按下身体时,我想要一个动作的视觉指示,就像普通列表项在按下时会闪烁橙色背景一样。默认情况下我没有得到这个,因为(我的理论)onPress 事件被正文的视图拦截并且没有被列表项处理。

我尝试的第一件事是body.setBackground('#ff00ff')在 onPress 事件中执行(不管颜色)。这不起作用,因为(我怀疑)通话后没有重新粉刷。然后我再挖掘一点,并决定使用<selector/>基于 - 的背景。我body_background.xmldrawable文件夹中定义并将其分配给正文的背景属性。

在那里我注意到只有当列表处理了偶数时,背景才会改变。例如,如果我设置<item android:state_selected="true" android:drawable="@drawable/selected"/>然后当我按下头部时 - 两个元素(头部和身体)的背景都会改变,但是当我按下身体时 - 什么都没有。

所以总结一下我的问题 - 如果我为其分配自定义 onClick 处理程序,如何更改列表项中子元素的背景?任何提示将不胜感激

4

1 回答 1

0

好的。这是我沿途挖掘的更多信息。

  1. 我目前正在尝试将实现切换到 ExpandableListView,它提供了我必须编码的功能(滑动体)。我在这里可能遇到的问题是我有一个花哨的“无尽”列表实现,我正在使用 ArrayAdapter#add 方法在滚动时动态地将项目添加到列表中(请参阅我在 androidguys.com 上的教程)好吧,add缺少该方法从BaseExpandableListAdapter所以我需要看看是否将项目添加到内部数组会起作用(它不适用于 ArrayAdapter)可能做 ExpandableListView#notifyChanged() 会处理这个问题
  2. 当我直接使用setBackgroundColor方法时我什么都看不到的事实可能是由于随后的 callstartActivity调用停止了所有绘画,直到显示新的 Activity

PS 这已通过切换到 ExpandableListView 解决。我可以补充一下 - 它很漂亮!无需发明任何东西

于 2009-10-23T18:19:23.240 回答