Библиотека «dagger-android», как внедрить свойство класса Dialog? - PullRequest
0 голосов
/ 25 апреля 2018

Я последовал примеру, который утверждает, что это лучший «новый путь».(https://proandroiddev.com/exploring-the-new-dagger-android-module-9eb6075f1a46) Полный пример исходного кода приведен здесь (https://github.com/jshvarts/DaggerAndroidKotlinSampleApp).. Используется для ввода свойств в Activity, подобную этой,

class MainActivity:AppCompatActivity()
{
    @Inject
    lateinit var something:Something

    override fun onCreate(..)
    {
      AndroidInjection.inject(this)
      ...

И в модуль

* 1009.*

Это хорошо работает, но как насчет пользовательского класса Dialog? Я создаю диалог с некоторыми пользовательскими аргументами (которые известны только во время выполнения с помощью пользовательских данных), например, следующим: я могу изменить конструктор MyDialogвзять something и позволить действию в конечном итоге передать something конструктору MyDialog.

Но это было бы некрасиво, потому что действие не создает MyDialog напрямую. MainActivity имеет пользовательский элемент управления, и этот пользовательскийЭлемент управления показывает MyDialog при нажатии кнопки на нем.Так, чтобы использовать метод конструктора, я должен передать something из MainActivity в пользовательский элемент управления, а затем позволить пользовательскому элементу управления создать MyDialog с something.

class MyDialog:Dialog
{
      @Inject
      lateinit var something:Something

      constructor(context:Context?, arg1, args2, args3):super(context)
      {
          //Cannot call AndroidInjection.inject, because
          //it does not take a Dialog.
          AndroidInjection.inject(this); //<--Does NOT work.

Если бы я только мог сказать Даггеру вводить поля MyDialog в его конструкторе ... Какое решение для этого?

1 Ответ

0 голосов
/ 25 апреля 2018

AndroidInjection работает только с классами, такими как действия и фрагменты, а не диалоги. Если вы хотите внедрить ваш диалог, используйте вместо него фрагмент диалога. Или, так как вы можете просто вызвать конструктор, используйте инъекцию конструктора, а не Dagger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...