当前位置: 首页 > 知识库问答 >
问题:

如何使用新的dagger-android将活动传递到dagger模块

石超
2023-03-14
Android Studio 3.4
dagger-android 2.21

如何使用新的dagger android将活动传递给dagger模块

在使用dagger的旧版本之前,我们可以在构造函数中传递活动,并在提供者方法中返回该活动。但我不知道如何用dagger android做到这一点

我有以下模块。然而,dagger现在不关心预测活动

@Module
class ActivityModule {
    @Reusable
    @Provides
    fun provideRetryListener(forecastActivity: ForecastActivity): RetryListener {
        return forecastActivity
    }
}

RetryListener是由预测活动实现的接口。我希望能够将此RetryListener注入到我的RetryFra点中,即。

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注入到RetryFrapt中,该RetryListener预测活动实现?

非常感谢提前

共有1个答案

段干俊茂
2023-03-14

我看不到提供您的预测活动的模块,即:

@ContributesAndroidInjector
abstract fun forecastActivity(): ForecastActivity

活动需要实施HasSupportFragmentInjector,并提供一个分派和重新分配Injector

 类似资料:
  • 问题内容: (来自/ r / androiddev的x- post ) 我想以说这不是“更好”的帖子作为开头。严格来说,这是一个关于如何使用Dagger构建东西(以及如何在Kodein中构建它以帮助说明问题)的问题。 我已经在多个工作项目中使用Kodein几年了,但是我发现它使用起来非常容易,以至于我再也不会看过Dagger了。我开始了一个新的个人项目,我想再给Dagger做个尝试。 为简单起见,

  • 实现如下所示 > 其次,我有一个活动范围组件网,我提供了当前活动和需要上下文的不同视图。 @module public class ActivityModule{private

  • Dagger是网易杭州研究院QA团队开发的一个轻量级、运行稳定的WebUI自动化测试框架,主要基于Selenium及TestNg可以认为是对Selenium进行二次封装的一个框架(俗称 造轮子 )。之所以把这个轮子开源出来,主要在于经过了公司内部多个项目的实践,也取得了不错的成效,因此,希望开源以后可以对大家有所帮助及参考。 设计理念 Dagger首先是一个WebUI自动化框架,提供了赖以操纵浏览

  • 我正在尝试将3D-dulearray传递给另一个活动。我不知道为什么我得到NullpointerException?缺少什么? 主要活动 数据活动(reveiver) 而且我可以肯定的是,3d阵列已经在MainActivity中分配了。我已经测试过了! 如果有人对此有任何解决方案,并且可以回答为什么我得到NullPointerException,那将是很高兴的。 (编辑:NullpointerEx

  • 问题内容: 我试图使Dagger在@Module批注内没有“ injects”指令的情况下工作。我将测试项目基于Android Simple Dagger示例 这是给我带来问题的部分: (编辑):在我的代码中是CTXModules.java 我要删除的部分是“ injects = HomeActivity.class”。我知道我可以在构造函数中使用@Inject批注标记自己的模块,以在那里删除该部