2016-01-15 3 views
2

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

Как я могу получить ссылку на значение в подмодуле из основного модуля приложения? В качестве примера, диалоговое окно настраиваемого предупреждения, в котором имеет xml-макет, должно принимать значение цвета, которое находится в главном модуле приложения.

Я попытался добавить основной модуль приложения в качестве зависимости в подмодуле, но это определенно не сработает, так как будет циклическая зависимость.

ответ

8

Объяснение:

Попробуйте организовать подмодулях со следующими правилами:

1).Главный модуль приложения с Activity, Fragment + xmlayouts

Нет модули не должны зависеть от этого модуля. Этот модуль будет зависеть от модуля ресурсов, подмодуль 1, подмодуль 2.

Не храните общие ценности в этом модуле, как colors, dimens и т.д.

2).модуль ресурсов с colors, attrs, dimens и т.д.

Просто создать андроида библиотечный модуль и хранить здесь только общие ресурсы. Этот модуль не должен иметь никаких зависимостей. И каждый модуль, который нуждается в ресурсах, будет зависеть от этого модуля.

3).Подмодуль 1 с пользовательскими предупреждениями.

Этот модуль будет зависеть от ресурсный модуль.

4).Подмодуль 2 с пользовательскими видами.

Этот модуль будет зависеть от ресурсный модуль.

Diagramm:

enter image description here

Код:

https://github.com/AlexanderGarmash/AndroidModulesShowcase

Описание:

<module_root>/app/build.gradle зависимости раздел:

compile project (':ResourceModule') 
compile project (':Submodule1') 
compile project (':Submodule2') 

<module_root>/ResourceModule/build.gradle зависимости раздел:

ничего

<module_root>/Submodule1/build.gradle зависимостей раздела:

compile project (':ResourceModule') 

<module_root>/Submodule2/build.gradle зависимости раздел:

compile project (':ResourceModule') 

Преимущества:

  • Низкая муфта
  • Прозрачная ясная структура

Недостатки:

  • Если у вас есть много модулей, которые вы должны не забывать ссылку ResourceModule везде.

UPDATE

Не забудьте импорт правильного R класса. enter image description here

+0

спасибо за подробное объяснение – RJFares

+0

После того как я переместил все ресурсы (за исключение макетов), цвет в моем, которые вводимом коэффициенте ссылающегося значение, сгенерированные в папке сборки нет (например, @ цвета/черного или @color/md_brown_800). Это значения, автоматически генерируемые в сборке, но не установленные мной, конечно. Как решить эту проблему? – RJFares

+0

@RJFares Это довольно просто. В 'import' вы должны проверить, что вы импортируете класс« R »из целевого модуля, а не из текущего модуля. Поскольку класс 'R' генерируется для каждого модуля – Alexander

1

Вы должны добавить значения ресурсов в библиотечном модуле вместо модуля приложения, если вы хотите использовать их в библиотеке. Поскольку при добавлении библиотеки приложение может использовать ресурсы библиотеки, но наоборот не может быть.