“资源 ID 在 Android Gradle 插件 5.0 版中将是非最终的,请避免将它们用作注释属性”对 ButterKnife 的影响

Ros*_*ala 31 android gradle android-studio android-gradle-plugin butterknife

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

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

@OnClick(R.id.buttonDateFilter)
public void onButtonDateFilter(View view) {...}
Run Code Online (Sandbox Code Playgroud)

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

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

Big*_*air 25

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

正如本文所述,Android 查看绑定教程:入门

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

来自ButterKnife GitHub页面:

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

  • @Kimi Chiu 你肯定可以在视图持有者中使用视图绑定。您只需将绑定对象而不是视图传递到 ViewHolder 构造函数中,然后对您传入的任何内容的 .getRoot() 调用 super 。为此,在 OnCreateViewHolder 中,您只需“返回 new ViewHolder(ItemViewBinding.inflate(LayoutInflater)” .from(parent.getcontext(), Parent, false));` 构造函数如下所示: `public ViewHolder(ItemViewBinding vb) { super(vb.getRoot()); }` (3认同)

Rid*_*lly 5

正如 Jake Wharton 所建议的,您可以应用 butterknife-plugin 并使用 R2 而不是 R 来访问资源 ID。

  • 您可以在此处添加该信息的链接吗?Jake 提到了 R2。 (2认同)
  • @KidusTekeste 同时我们也使用视图绑定,它非常好用。我认为,从长远来看,R2 解决方案并不理想,因为 Butterknife 不再继续使用。 (2认同)
  • @Kidus 链接在问题中。 (2认同)