У меня есть Activity и его ведущий, оба вводятся с адаптером.Для действия необходимо установить адаптер в RecyclerView, а докладчику - для вызова методов обновления (например, notifyItemChanged
) при изменении данных.
Проблема заключается в том, что, поскольку адаптер вводится дважды, докладчики деятельность не имеет тот же экземпляр этого.Мне нужен Dagger, чтобы создать только один его экземпляр.Однако адаптеру нужен контекст действия и имеется @ActivityScope
для предотвращения утечек памяти, что означает, что я также не могу использовать область действия @Singleton
.
Что-то я не понимаю?Есть ли способ внедрить адаптер в оба класса, не устанавливая его вручную с помощью метода setAdapter
в докладчике или в Activity?Или есть способ ограничить количество экземпляров созданного адаптера?
РЕДАКТИРОВАТЬ: Файлы внедрения зависимости:
@Module
public interface MainModule {
@ActivityContext @Binds
Context context(MainActivity activity);
@ActivityScope @Binds
MainContract.Presenter presenter(MainPresenter presenter);
// CHILD FRAGMENT
@FragmentScope @ContributesAndroidInjector
ChildFragment childFragment();
@ActivityScope @Binds
ChildContract.Presenter childPresenter(ChildPresenter presenter);
@ActivityScope @Binds
ChildContract.AdapterView adapterView(MyAdapter adapter);
}
ChildFragment
, ChildPresenter
и MyAdapter
классы аннотируютсяс @ActivityScope
.
Это единственный способ заставить его работать, и он мне кажется неправильным, потому что ChildPresenter и MyAdapter используются только из фрагмента.Однако, комментируя их с @FragmentScope
, выдается ошибка: «не может ссылаться на привязки с разными областями действия».Также фрагмент «провайдер» и сам фрагмент помечены двумя разными областями действия?