Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

activity和fragment共用presenter #331

Closed
Del-Gin opened this issue Sep 19, 2019 · 3 comments
Closed

activity和fragment共用presenter #331

Del-Gin opened this issue Sep 19, 2019 · 3 comments

Comments

@Del-Gin
Copy link

Del-Gin commented Sep 19, 2019

大神,请教一下
我有个activity和fragment,想共用一个presenter,该怎么处理??

presenter应该是ActivityScope,但是activity和fragment对应的Component分别是ActivityScope和FragmentScope,他总是提示我may not reference bindings with different scopes。

@JessYanCoding
Copy link
Owner

#181

@Del-Gin
Copy link
Author

Del-Gin commented Sep 24, 2019

这个我看了,我理解的这是一个activity使用两个presenter的解决方法。我回去再研究一下。
如果activity和fragment共用了一个presenter,那么activity和fragment持有的presenter是否为同一个?

@JessYanCoding
Copy link
Owner

JessYanCoding commented Sep 24, 2019

可以重用同一个 Presenter,但只是类是同一个,对象不是同一个,最简单的方式就是 Fragment 也使用和 Activity 一样的 Component,如果 Fragment 有自己独立的 Component,并且 Component 的 scope 和要重用的 Presenter 的 scope 不同肯定会报错。

有时候不要纠结 ActivityScope,Scope 的作用只是保证 Module 和 Component 同步。

也就是说,如果 Component 的 Scope 和 Module 的 Scope 是一样,第二次调用,就不会生成新的对象,也就是说,你 Fragment 的 Component 用 ActivityScope 也是可以的,但只要保证 Presenter 也是用的 ActivityScope 就可以了,达到的效果和用 FragmentScope 没有任何区别,所以你的 Presenter 本身用的就是 ActivityScope,你在 Fragment 中想重用这个 Presenter,那给 Fragment 的 Component 和 Module 定义 ActivityScope 也是可以的。

自定义的 Scope 本来也就没什么实际意义,就是为了在阅读源码时好区分业务层的逻辑,但是在 Dagger 编辑器中和官方定义的 @singleton 都是使用相同的处理逻辑,核心在于 Module 和 Component 是否是同一个 scope,至于这个 scope 是什么 scope,不是太重要。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants