【问题标题】:TextView and Button in each row and onListItemClick()每行中的 TextView 和 Button 以及 onListItemClick()
【发布时间】:2010-08-31 17:24:47
【问题描述】:

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

|一行中的一些文本(按钮)|

现在,当我单击此文本时,没有任何反应。根本没有调用任何函数。但是当我点击按钮时,我可以处理事件。我使用 onListItemClick()

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

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

提前谢谢你!

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

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


    我们可以通过编程方式使用setFocusable()

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

    setFocusable(): 将此设置为 false 也将确保此 视图在触摸模式下不可聚焦。

    【讨论】:

    • 虽然这可以正常工作,但您应该考虑实施以下解决方案,因为这将使 d-pad/轨迹球导航正常运行:stackoverflow.com/questions/3789943/…
    • 这适用于 textview,但对于 imagebutton,也许你需要,在 Adapter getView 上输入代码 v.findViewById( R.id.my_btn ).setFocusable( false );
    • @OrlandoLeite,谢谢,救了我的培根,我添加了 focusable="false" 并没有成功,但 setFocusable 确实成功了!!!
    • @Mairyu 有点奇怪,setFocusable 应该是相同的,但是以编程方式。
    【解决方案2】:

    挑战在于 ListView 和按钮争夺焦点。通常,两者中只有一个可以接收焦点(并因此被单击)。在您的事业中,按钮是可聚焦的。

    要对此进行调整,您可以使用 ListView 的 descendantFocusability 属性。

    您想通过在 ListView 项目中添加一个按钮来完成什么?当您单击按钮时,与单击按钮外的列表视图项时,您希望发生不同的事情吗?

    【讨论】:

    • 是的,正如您所说,我希望按钮执行不同的任务。谢谢你的解释。
    • 但我还是有一些问题。就像你说的,当我单击按钮与单击按钮外部的 ListView 时,我想做不同的事情。 onListItemClick() 仅在我单击列表上的某个位置而不是按钮时才被调用。我想我会从 onListItemClick() 的参数“v”中获取按钮的视图。那么,您建议我怎么做才能处理单击特定按钮的事件?
    • 这个人:stackoverflow.com/questions/2679948/… 有一个可能适用的类似问题的解决方案......但请记住,人们在尝试点击小按钮时目标不佳。通常,人们希望能够单击 ListView 行中的任意位置,因为大多数应用程序就是这样工作的。您可能需要重新考虑您的 UI 以避免嵌套可点击区域。
    • stackoverflow.com/questions/500264/… 这对我有帮助。感谢您注意人们使用此类应用程序的方式。一般来说,在这种情况下最好使用上下文菜单。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多