Android 匕首和小刀的区别

Android 匕首和小刀的区别,android,butterknife,dagger,Android,Butterknife,Dagger,有人能指出和之间的区别吗?我知道Butterknife是一个视图注入库,Dagger是一个依赖注入库。但是在线文档对我来说似乎有点开销。根据Butterknife文档,您也可以进行非活动注射,这就是Dagger的功能?还是我误解了什么?ButterKnife只针对注入视图。非活动注入只是意味着您可以提供自己的视图根以从中注入视图(如手动膨胀视图等)。 匕首有点复杂。只要指定了满足这些依赖关系的模块-类,它就可以注入任何您想要的内容(或者您可以使用构造函数注入) 作为一条底线——我想说的是,But

有人能指出和之间的区别吗?我知道Butterknife是一个视图注入库,Dagger是一个依赖注入库。但是在线文档对我来说似乎有点开销。根据Butterknife文档,您也可以进行非活动注射,这就是Dagger的功能?还是我误解了什么?

ButterKnife只针对注入视图。非活动注入只是意味着您可以提供自己的视图根以从中注入视图(如手动膨胀视图等)。 匕首有点复杂。只要指定了满足这些依赖关系的
模块
-类,它就可以注入任何您想要的内容(或者您可以使用构造函数注入)

作为一条底线——我想说的是,ButterKnife可以帮助你避免所有创建视图的样板代码(aka
(TextView)findViewById(R.id.some_text_view);
。没什么。在引擎盖下,它仍然执行所有枯燥的代码。所以它不是真正的注入

另外值得一提的是,Jake Wharton是这两款酷炫LIB的开发者之一:)

以下是一些有用的链接:


没有太多有用的ButterKnife链接。但是它非常简单和直接,所以希望您不需要任何这里是Buterknife文档的链接。 这很简单。然而,文档没有说明的是,黄油刀的设计意味着,您也可以在自定义视图中使用黄油刀。只需将“this”替换为“context”或“getContext”,即可确定范围

链接:

在我的项目中,我将黄油刀、parcelable和easyAdapter组合到列表视图中。原因是较少的样板和更快和更干净的包裹。因此,如果您有很多列表视图,我建议您使用这种方法

链接:


区别非常简单:就像是没有那么尖锐。

正如文档中指出的那样。

@JakeWharton在评论中部分回答了这一问题:

TL;博士:它们相辅相成。使用黄油刀插入视图,匕首插入其余视图


如果您使用Dagger尝试注入视图,您将有一个非常好的解决方案 糟糕的时刻:)试着把黄油刀当作一种绑定视图的方式 而不是注射。我之所以称之为注射是因为 RoboGuice皈依者抱怨缺乏“视图注入” 用匕首。这根本不是注射。喜欢这个答案吗 提到这一点,这只是减少样板的一种方法。在引擎盖下面是 只是打电话给findViewById就像你一样


ButterKnife是为了简化注册点击监听器,并减少
findViewById()
调用提供的样板文件

Dagger和Dagger2是通用依赖注入系统

忽略Guice和MVVM上的文本,阅读
依赖注入
安卓方式
。这基本上回答了Dagger的作用和简化


那么,您的意思是我们可以使用dagger来插入TextView、EditView等?我相信您可以使用限定符(请参阅dagger文档中的限定符部分)在dagger中插入视图,您可以将id作为限定符传递,但这看起来非常奇怪。我认为匕首的创建者如果发现有人在使用匕首进行视图注入,会非常惊讶:)但从技术上讲,我看不出它不起作用的任何原因。老实说,网上没有多少关于如何使用匕首的文档。我正在找一些教程,但找不到。而官方文件似乎给我带来了很大的开销,让我无法掌握一切。无论如何,我都会接受你的回答,但如果你能发布一些有用的链接,那会很有帮助。干杯如果您使用Dagger来尝试注入视图,您将经历一段非常糟糕的时光:)尝试将黄油刀视为绑定视图的一种方式,而不是注入。我之所以称之为“注入”,是因为所有的机器人向导皈依者都在抱怨Dagger缺乏“视图注入”。这根本不是注射。正如答案提到的,这只是一种减少样板文件的方法。在引擎盖下,它只是像你一样调用
findviewbyd
!直接从马嘴里。。。可以这么说。传播好话!:)实际上,我在文档中读到了这一点,但为了得到更好的解释,我在这里结束了。但是匕首意味着视图绑定只需要无限多的样板代码,因为您必须强制转换任何可以得到的视图子类。ButterfKnife在编译时确定强制类型转换类型。您不能告诉dagger这样做。@LouisCAD dagger不是为视图绑定()而设计的。难怪它在最新版本中被重命名为
ViewBinder