我有底部栏的活动,它切换两个片段
galleryFrament
和
profilefragment
,注入
MainActivity
:
class MainActivity : DaggerAppCompatActivity(), MainContract.View {
@Inject
lateinit var galleryFragment: GalleryFragment
@Inject
lateinit var profileFragment: ProfileFragment
我以这种方式在它们之间切换:
val transaction = fragmentManager.beginTransaction()
transaction.replace(frameId, fragment)
transaction.commit()
模块提供
主要活动
,具有范围
@ActivityScoped
:
@Module
abstract class ActivityBindingModule {
@ActivityScoped
@ContributesAndroidInjector(modules = arrayOf(MainModule::class, GalleryModule::class, ProfileModule::class))
internal abstract fun mainActivity(): MainActivity
模块提供
GalleryFragment
:
@Module
internal abstract class GalleryModule {
@FragmentScoped
@ContributesAndroidInjector
abstract fun galleryFragment(): GalleryFragment
@ActivityScoped
@Binds
abstract fun galleryPresenter(galleryPresenter: GalleryPresenter): GalleryContract.Presenter
@Module
companion object {
@ActivityScoped
@Provides
@JvmStatic
fun galleryAdapter(context: Context): GalleryAdapter {
return GalleryAdapter(context);
}
}
}
最后
AppComponent
:
@Singleton
@Component(modules = arrayOf(ImagesRepositoryModule::class,
ApplicationModule::class,
ActivityBindingModule::class,
AndroidSupportInjectionModule::class,
EventsModule::class))
interface AppComponent : AndroidInjector<MyApplication> {
厨房碎片
提供了
@FragmentScoped
批注来源
GaleryModule
。我吃了一片注释
@碎片范围的
和
@活动范围
来自此处发布的谷歌蓝图样本:
https://github.com/googlesamples/android-architecture][google-archutecture
问题是:
当我切换片段时
GalleryFrament
已创建(
onCreate()
每次调用),但我想使用以前创建的实例。
据我所知,匕首瞄准镜,
厨房碎片
应该是
@活动范围
(只要活动还活着,它就一直活着),但如果我设置它,
@ContributesAndroidInjector
生成与其父组件作用域相同的子组件,这是非法的。