【问题标题】:Redirect OnItemClick on a ListView to the real touched Item view将 ListView 上的 OnItemClick 重定向到真正触摸的 Item 视图
【发布时间】:2012-08-07 16:20:27
【问题描述】:

我有一个列表视图,它显示每一行/项目的视图列表(一个列表项目可以有例如 2 或 3 个按钮)。所有项目都设置为不可聚焦且不可点击。这种方式点击调用我的 ListView OnClick 的项目。我现在要做的是在真正的点击视图上调用 performClick() (因为它被设置为不可聚焦/可点击),所以什么也没做。这可能吗?我试图找到一种基于单击位置获取视图的方法,但没有找到任何东西,另一方面,列表视图的 onItemClick 单击处理程序似乎也没有获得触摸的 x/y。我知道为此我可以使用 OnTouchEvent 但我将无法知道点击了什么项目,等等...

【问题讨论】:

  • 问题有点令人困惑..您想在有人点击任何按钮时执行 onItemClick 吗?反之亦然?
  • 对不起。我主要希望当用户单击属于列表视图项(已通过自定义列表数据适配器设置)的视图(例如按钮)时,接收单击的是列表而不是按钮,之后通过 performClick() 或其他方法通知按钮它在我的自定义列表视图项 onclick 处理程序中被单击。我希望现在更清楚了。
  • 所以你想同时调用两个控件的 onClick 事件?对吗?
  • 是的,但是第二个 onclick 将由我手动调用。流程或多或少是:1)使用自定义数据适配器设置列表视图。 2) 为列表视图设置一个 onclickItem。 3) 使自定义数据适配器创建的所有视图都不可点击(例如 3 个按钮)。 4) 单击列表视图时,我们会在列表中收到 OnItemClick 事件。 5)现在我们测试真正点击了哪个视图(三个按钮之一),然后我们手动通知按钮。很抱歉造成混乱,但有点难以解释。

标签: android android-layout android-widget


【解决方案1】:

好的,试试这个,可能对你有帮助...为按钮和 ListItem 设置一个通用的 onClick。

@override
public void onClick(View v) {
    Sting position=v.getTag().toString();               //<--- like this
    //task to do when clicks on the view...
    switch (v.getId()) {
    case R.id.<id_of_the_button1>:  
           //task to do when clicks on the button 1         
    break;
    case R.id.<id_of_the_button2>:  
           //task to do when clicks on the button 2         
    break;
}

在自定义适配器中实现 OnClickListener 并使用上面的 onClick 覆盖它。

【讨论】:

  • 好吧,这可能有效,问题是我需要知道列表的哪个位置 ID(列表项)也被单击以获取那里的一些数据,等等......这是为什么我使用 List OnItemClick。使用您的方法,我对列表中的项目位置一无所知。就我而言,我需要这个,因为每个项目列表都是菜单中的不同选项。
  • 在创建列表时将位置设置为标签。使用 setTag() 方法。您可以为列表项视图设置标签。我编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多