android - 如何使用新的 `dagger-android` 将活动传递给 dagger 模块
问题描述
Android Studio 3.4
dagger-android 2.21
如何使用activity
新的传递给匕首模块dagger-android
在使用旧版本的 dagger 之前,我们可以在构造函数中传递 Activity 并在提供程序方法中返回它。但我不知道如何用 dagger-android 做到这一点
我有以下模块。但是,匕首现在不关于ForecastActivity
.
@Module
class ActivityModule {
@Reusable
@Provides
fun provideRetryListener(forecastActivity: ForecastActivity): RetryListener {
return forecastActivity
}
}
RetryListener
是实现的接口ForecastActivity
。我希望能够将它RetryListener
注入我的RetryFragment
ie
class RetryFragment : Fragment() {
@Inject
lateinit var retryListener: RetryListener // Inject here
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
AndroidSupportInjection.inject(this)
super.onCreateView(inflater, container, savedInstanceState)
retryListener.onRetry() // usage like this
return inflater.inflate(R.layout.failurecase_layout, container, false)
}
}
在预测活动中
class ForecastActivity : AppCompatActivity(), RetryListener {
@Inject
lateinit var forecastPresenter: ForecastPresenter
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
}
override fun onRetry() {
/* do something here */
}
}
我的 ActivityBuilder 如下:
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [ActivityModule::class])
abstract fun injectIntoRetryFragment(): RetryFragment
}
我的组件是这样的:
@Singleton
@Component(modules = [
AndroidSupportInjectionModule::class,
ActivityBuilder::class,
ActivityModule::class])
interface StockComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: StockApplication): Builder
fun build(): StockComponent
}
fun inject(application: StockApplication)
}
我的申请是:
class StockApplication : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var dispatchingAndroidActivityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var dispatchingAndroidFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
DaggerStockComponent
.builder()
.application(this)
.build()
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> {
return dispatchingAndroidActivityInjector
}
override fun supportFragmentInjector(): AndroidInjector<Fragment> {
return dispatchingAndroidFragmentInjector
}
}
所以问题是在使用 dagger-android 时如何将 注入RetryListener
到RetryFragment
由RetryListener
实现的ForecastActivity
?
提前谢谢了
解决方案
我看不到提供您的模块ForecastActivity
,即:
@ContributesAndroidInjector
abstract fun forecastActivity(): ForecastActivity
Activity
遗嘱需要执行并HasSupportFragmentInjector
提供DispatchingAndroidInjector<Fragment>
推荐阅读
- python-3.x - Pymongo 使用附加列表值更新集合
- r - R中的双向条形图
- docker - Mac 的 Docker 桌面:绑定到 tcp 端口
- linux - 在 Docker 构建中创建文件
- shell - Jenkins 管道中的 Shell 脚本 cd 命令给出错误“没有这样的文件或目录”
- css - 为什么这个 CSS Grid 孩子需要一个最大高度来启用滚动?
- mongodb - 使用 SpringData MongoDB repository.saveAll() 加载大量数据时如何处理套接字错误连接关闭异常
- datepicker - Jquery datepicker 周末从计算中排除
- image - 使用像素值或整数时的结果差异
- python-3.x - Tensorflow 2.0 中的 LSTM 状态元组