【问题标题】:Add multiple clickable zones in a listview row在列表视图行中添加多个可点击区域
【发布时间】:2015-04-15 11:57:04
【问题描述】:

我想为带有两个点击区域的列表视图实现一行,但有一些特殊要求:

我想要实现的是这样的:

使用以下点击配置:

  • 红色区域链接用户个人资料
  • 蓝色区域链接项目详细信息
  • 黄色区域上的点击会被忽略
  • 点击蓝色区域时,所有行都被选中(例如背景=?attr/selectableItemBackground

我已经尝试了几个配置,但我没有得到所有要点:

配置 A: 在蓝色容器上添加一个 clicklistener,在红色容器上添加另一个,效果很好,但是单击蓝色区域时缺少整行选择效果。

配置 B: 在整行上添加一个 clickListener,在红色容器上添加另一个 clicklistener,同样有效,但不会忽略黄色区域上的点击。

我怎样才能做到这一点?

注意:还尝试在黄色容器上使用带有空单击侦听器的 Config B。但是添加一个clickListener来忽略它听起来很奇怪,而且我的真实视图比这更复杂,我应该添加很多空的clicklistener。理想的行为应该是蓝色容器将其点击状态传播到 rowView

【问题讨论】:

  • 向您的适配器添加点击监听器并在活动中进行回调。

标签: java android xml listview


【解决方案1】:

您可以选择 AB 只需少量添加

一个

调用listview方法void setItemsCanFocus(false)所以当你点击蓝色部分时,整行都会获得焦点

B

在您的自定义或基本适配器中覆盖 isEnabled() 方法并为黄色部分返回 false。这将阻止点击事件到黄色部分

我希望你的错误会得到解决。

谢谢

【讨论】:

    【解决方案2】:

    所以 A 有效,但您想摆脱按下的颜色?如果是这样,请将其添加到您的 ListView XML 中。

        <ListView
        android:cacheColorHint="#00000000"
        android:listSelector="@android:color/transparent"
        />
    

    【讨论】:

      【解决方案3】:

      您应该使用两个子布局实现一个布局,其中一个包含头像,另一个包含您的数据,而在您的适配器类中,您应该添加具有特定布局 id 的标签,并为该布局添加 OnClickListener然后当您单击布局时,您会获得标签,并且基于该标签,您可以在 ListView 项目中处理您的视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多