2015-10-20 157 views
1

如何为您的视图提供依赖关系(android.view.View)?我在匕首中看到的大多数示例都通过视图的上下文来提供它们,但这看起来不太可组合。说如果我有一个双窗格视图,我希望封闭视图为主视图和详细视图提供依赖关系。如果使用嵌套视图中的上下文,则依赖关系仍将由活动提供,而不是包含视图。一种解决方法是将上下文传递给嵌套视图,但这会使通货膨胀变得困难。这不是一个匕首问题。查看依赖关系注入

+0

什么是您希望将某些东西注入视图然后将该依赖项传递给子视图而不是直接将注释依赖注入子视图的用例? – FriendlyMikhail

+0

该视图以某种方式对其父项进行操作。如果回调通过上下文传递,它将在活动上运行(除非ContextWrapper)。通过方法传递回调并不是很有趣(没有最终) – DariusL

+0

想要在自定义视图中注入DI(如CustomTextView扩展TextView),我应该在哪里调用注入? –

回答

0

如果我正确理解你,你想传递一些依赖到你的视图。据我所知,你可以像在Activity一样注入依赖关系。使用Dagger 2,您可以定义组件,模块,接口并使用@Inject注释。它应该工作。我其实并没有在Views中使用注射。我通常在“活动”中使用它们,并将一些数据(如字符串,整数,对象列表,自定义对象等)传递给视图。我认为,观点应该尽可能简单,我不确定在他们内部使用注射是否正确。也许这可能是一个非常具体的解决方案。

+0

我明白如何注入,我问是否有方法让封闭视图提供嵌套视图的依赖关系。 – DariusL

+0

我认为,找出最简单的方法就是尝试一下。我不知道是否可以从封闭视图向嵌套视图传入注入,但是可以尝试在嵌套视图中初始化注入。或者,您可以在共享对象中初始化注入,这可以通过封闭和嵌套视图来使用。也许最好在GitHub上通过问题提出这个问题,所以Dagger维护者可以给你更好的答案。 –

0

你可以只是做一个盲目遍历了视图树,要求每位家长如果有一个喷油器就应该使用。

或者,你可以有封闭的观点负责打针,而不是有嵌套视图尝试自己注射。毕竟,即使匕首示例指南显示对象注入自己,通常情况下依赖注入应该是另一种方式:其他东西注入到我们中。