问题 每行中的TextView和Button以及onListItemClick()


我有一个ListView,上面有一些元素。每行都有一个TextView和一个Button。它看起来像这样:

|一些文本连续(按钮)|

现在,当我点击这个文字时没有任何反应。根本没有人调用任何功能。但是,当我点击按钮时,我可以处理该事件。我使用onListItemClick()

那么我应该使用什么而不是这个TextView来处理事件(当我点击文本时)?

在此之前,我每行只有一个TextView,当我点击一行时一切正常(调用onListItemClick())。

先谢谢你!


9060
2017-08-31 17:24


起源



答案:


添加属性 focusable="false" 到你的 TextView ::

<TextView
...
...
        android:focusable="false"
        />

并且您可能需要对ListView中的其他元素执行相同的操作。


我以编程方式使用该方法 setFocusable()

v.findViewById(R.id.my_button).setFocusable(false); 

setFocusable():将此设置为false也将确保这一点   视图在触摸模式下无法聚焦。


9
2017-08-31 17:37



谢谢,它的工作原理。 - Lukas Fryc
虽然这很好,但您应该考虑实现以下解决方案,因为这将使d-pad /轨迹球导航正常运行: stackoverflow.com/questions/3789943/... - sven
这将适用于textview,但对于imagebutton,也许你需要,加上代码 v.findViewById( R.id.my_btn ).setFocusable( false ); 在适配器getView。 - Orlando Leite
@OrlandoLeite,谢谢,救了我的培根,我加了 focusable="false" 并没有做到这一点,但是 setFocusable 确实做到了! - Mairyu
@Mairyu lill有点奇怪,setFocusable只是编程而已。 - Jorgesys


答案:


添加属性 focusable="false" 到你的 TextView ::

<TextView
...
...
        android:focusable="false"
        />

并且您可能需要对ListView中的其他元素执行相同的操作。


我以编程方式使用该方法 setFocusable()

v.findViewById(R.id.my_button).setFocusable(false); 

setFocusable():将此设置为false也将确保这一点   视图在触摸模式下无法聚焦。


9
2017-08-31 17:37



谢谢,它的工作原理。 - Lukas Fryc
虽然这很好,但您应该考虑实现以下解决方案,因为这将使d-pad /轨迹球导航正常运行: stackoverflow.com/questions/3789943/... - sven
这将适用于textview,但对于imagebutton,也许你需要,加上代码 v.findViewById( R.id.my_btn ).setFocusable( false ); 在适配器getView。 - Orlando Leite
@OrlandoLeite,谢谢,救了我的培根,我加了 focusable="false" 并没有做到这一点,但是 setFocusable 确实做到了! - Mairyu
@Mairyu lill有点奇怪,setFocusable只是编程而已。 - Jorgesys


挑战是ListView和按钮争夺焦点。通常,两者中只有一个可以获得焦点(因此可以点击)。在你的事业中,按钮是可聚焦的按钮。

要调整这个,你可以玩 descendantFocusability ListView的属性。

你想通过ListView项目中的按钮来完成什么?当您单击按钮时,您是否希望发生不同的事情?当您单击按钮外的listview项目时?


6
2017-08-31 18:09



是的,正如你所说,我希望按钮可以完成不同的任务。谢谢你的解释。 - Lukas Fryc
但我仍有一些问题。就像你说的那样,当我点击按钮时,我点击按钮时,我想做不同的事情。仅当我单击列表上的某个位置而不是按钮上时,才会调用onListItemClick()。我以为我会从onListItemClick()中获取参数“v”中的按钮视图。那么,你建议我这样做,以便我可以处理点击特定按钮的事件? - Lukas Fryc
这家伙: stackoverflow.com/questions/2679948/... 有一个可能适用的类似问题的解决方案...但请记住,人们在尝试点击小按钮时有不好的目标。通常,人们希望能够点击ListView行中的任何位置,因为这就是大多数应用程序的工作方式。您可能需要重新考虑UI以避免嵌套可点击区域。 - Cheryl Simon
stackoverflow.com/questions/500264/... 这对我有帮助。感谢您注意人们使用此类应用的方式。通常,在这种情况下使用例如上下文菜单更好。 - Lukas Fryc