【问题标题】:Impact to ButterKnife from "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes"“资源 ID 在 Android Gradle 插件版本 5.0 中将是非最终的,避免将它们用作注释属性”对 ButterKnife 的影响
【发布时间】:2021-01-28 20:01:10
【问题描述】:

我在整个 Android 项目中使用带注释的属性将 Views 和事件绑定到字段和方法。

@BindView(R.id.textViewOrderId)
TextView textViewOrderId;

@OnClick(R.id.buttonDateFilter)
public void onButtonDateFilter(View view) {...}

从 ButterKnife 迁移出来现在变得有点贵了。我想澄清一下关于这个新的 Gradle 插件更改的一些事情,

  • 非最终资源 ID 将如何影响我当前的项目?
  • 如果我更新 Gradle 插件,我是否必须永久迁移出 ButterKnife?
  • this Reddit post 中提到的R2 类的效果如何?

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin butterknife


    【解决方案1】:

    这仍然没有答案。但我想除了用替代品替换 ButterKnife 之外别无选择,很可能是View Binding

    正如本文所述,View Binding Tutorial for Android: Getting Started

    另外,ButterKnife 的开发即将结束。该库的创建者 Jake Wharton 正在弃用它,转而支持 View Binding。

    来自ButterKnife GitHub 页面:

    注意:此工具现已弃用。请切换到视图绑定。显然,现有版本将继续工作,但只会考虑与 AGP 集成的关键错误修复。功能开发和一般错误修复已停止。

    【讨论】:

    • 如果我们在 recyclerView 中使用视图持有者怎么办?我认为在这种情况下,观点竞价仍然有效。又一次,给开发人员带来了另一场灾难。
    • 在 Kotlin 中,没有必要使用视图绑定,因为 kotlin android 扩展做得更好。但是,我们仍然需要在代码中设置onClickListener,所以这不是黄油刀的替代品。
    • @Kimi Chiu 你当然可以在viewholder中使用viewbinding。您只需将绑定对象传递给 ViewHolder 构造函数而不是视图,然后在传入的任何内容的 .getRoot() 上调用 super。为此,在 OnCreateViewHolder 中,您只需 return new ViewHolder(ItemViewBinding.inflate(LayoutInflater.from(parent.getcontext(), parent, false)); 构造函数如下所示:@987654326 @
    【解决方案2】:

    按照 Jake Wharton 的建议,您可以应用黄油刀插件并使用 R2 而不是 R 来访问资源 ID。

    【讨论】:

    • 你能把这个信息的链接放在这里吗? Jake 提到 R2 的地方。
    • @KidusTekeste 同时我们也在使用视图绑定,它很好用。我认为从长远来看,R2 解决方案并不理想,因为不再继续使用黄油刀了。
    • @Kidus 链接在问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多