我刚刚开始了我作为android程序员的职业生涯,目前我在很大程度上依赖于示例代码和api示例。我一直在使用this api example来生成可扩展的项目列表(请注意,此示例不使用ExpadableListView)。
在播放示例时,我尝试添加另一个小部件,该小部件将变为可见并与文本同时消失(示例代码中的mDialogue)。这适用于另一个TextView,但是当我尝试添加按钮小部件时,它就停止了工作。该列表将在第一次单击时展开,显示我隐藏的TextView和Button,但在进一步点击时它不会消失。但是,该按钮是可点击的,我能够设置一个onClick监听器来来回更改按钮文本。
我开始怀疑,是否只能在可点击列表项中包含可点击项?或者是否有某种工作?如果我使用ExpandableListView会解决我的问题吗?
答案 0 :(得分:4)
有两种方法可以处理由ListView#setItemsCanFocus(boolean)
控制的ListView中的焦点。如果您希望对列表项中的各个视图进行聚焦,以便用户可以单独与它们进行交互,而不是整个列表项,请将其称为通过true
。 false
是默认行为。
ListView管理项目焦点和点击的默认行为基本上是一个快捷方式/优化,用于从交互的角度看整个项目作为单个单元的常见情况,但其布局可能很复杂。当您告诉ListView其项目可以集中时,它会禁用此特殊行为,您应该使用更传统的处理列表项中视图上的事件的机制。 (听众,*方法等等)
但是,当您的ListView没有设置为可聚焦项时,为什么列表项会停止点击?如果列表项视图从false
返回View#hasFocusable()
,ListView将仅生成项目单击事件。这意味着如果要为其接收项目单击事件,则列表项的子项不能是可聚焦的。只要您的按钮可见,列表项就会有一个可聚焦的子项,并且将不再接收列表项单击事件。