【问题标题】:Butterknife: temporarily disable listenerButterknife:暂时禁用监听器
【发布时间】:2015-02-03 14:35:05
【问题描述】:

我将@OnClick 侦听器设置为列表项中的视图。在某些情况下,我需要禁用此视图的侦听器,以便列表视图可以处理单击(应调用 OnItemClickListener),然后再次启用它。有没有办法用 Butterknife 做到这一点?

【问题讨论】:

    标签: android butterknife


    【解决方案1】:

    我查看了 ButterKnife 的源代码,当您使用 @OnClick(R.id.some_id) 注释时,看起来 BK 在视图上生成并设置了 OnClickListeners。

    现在,禁用OnClickListener 的唯一方法是删除它:

    item.setOnClickListener(null)

    如果再次需要,可以要求ButterKnife重复注入:

    ButterKnife.inject(item);

    那和 Ethan 提出的解决方案是我能想到的唯一解决方案。

    【讨论】:

    • 看起来有点尴尬,但由于缺乏更优雅的解决方案,这将是可行的。谢谢!
    • version 7.0.0 injectbind 替换。
    • @aga :我正在尝试为 ImageView 执行此操作。无法使用 ButterKnife.bind(myImageView) 再次设置 OnClickListener
    【解决方案2】:

    我不知道用 Butterknife。但我知道您可以通过创建私有布尔值和 if 语句来做到这一点。 if(yourboolean == true){ //set your onClickListener }else{//do nothing }

    【讨论】:

    • 如果我在视图监听器中执行此操作,则不会调用父监听器。
    • 然后在这个 'if()' 语句中手动调用父监听器
    • 这就是我最终要做的,但感觉像是解决方法。此外,当 parent 是列表视图项并且为 ListView 设置了侦听器时(更新了我的问题以反映这种情况)
    【解决方案3】:

    您可以在应用程序中添加一个布尔标志,如shouldListenClick,并在您希望的任何地方设置为真和假。然后,您可以在执行代码之前检查 @OnClick 中的 shouldListenClick 或任何其他 ButterKnife 侦听器调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2019-11-26
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多