Android Studio 3.4
dagger-android 2.21
Как использовать, передайте activity
в модуль кинжала, используя новую dagger-android
Перед использованием более старой версии кинжала мы можем передать Activity в конструкторе и вернуть ее вметод провайдера.Но я не уверен, как это сделать с dagger-android
У меня есть следующий модуль.Тем не менее, кинжал сейчас не о ForecastActivity
.
@Module
class ActivityModule {
@Reusable
@Provides
fun provideRetryListener(forecastActivity: ForecastActivity): RetryListener {
return forecastActivity
}
}
RetryListener
- это интерфейс, который реализует ForecastActivity
.Я хочу иметь возможность вставить этот RetryListener
в мой RetryFragment
, т. Е.
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)
}
}
В прогнозе Activity
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
?
Заранее большое спасибо