#android #eclipse
#Android #eclipse
Вопрос:
У меня есть проект Android, который использует проект библиотеки (все из которых я создал). Я использую ADT / SDK v14, и мне нужно получить доступ к основному классу в основном проекте и вызвать функцию, когда диалоговое окно в проекте библиотеки будет закрыто. Теперь я могу это сделать, если добавлю ссылку на свой основной проект в проект библиотеки, но это не идеально. Как мне получить ссылку на класс в моем основном проекте из класса в библиотечном проекте?
Вот как это работает:
- В моем проекте есть мой основной класс, который является tabhost
- Tabhost получает фрагменты для вкладок из проекта библиотеки
- Один из фрагментов для вкладок запускает диалоговый фрагмент
- Когда этот DialogFragment отклоняется, мне нужно вызвать функцию fillItems() в основном классе (вот где я застрял)
У кого-нибудь есть идеи?
Спасибо, Эд
Комментарии:
1. С точки зрения ООП вы не должны общаться таким образом. Вы не хотите, чтобы ваши библиотеки были тесно связаны с вашими основными проектами; они быстро станут «недоступными для совместного использования».
2. Да, я знал, что это не тот путь, и я пытался избежать этого, но я просто не мог понять, что мне нужно делать. Ответ ниже был тем, что мне нужно получить от него. Спасибо.
Ответ №1:
Как мне получить ссылку на класс в моем основном проекте из класса в библиотечном проекте?
В идеале, вы этого не делаете.
Вместо этого вы:
- Определите интерфейс в библиотеке, который содержит методы, которые вы хотите вызвать, реализация которых исходит из основного проекта
- Реализуйте этот интерфейс для некоторого вероятного класса в вашем основном проекте
- Предоставьте эту реализацию библиотеке через некоторый установщик или через аргумент конструктора
- Попросите библиотеку вызывать методы в реализации интерфейса по мере необходимости
- Убедитесь, что вы не создаете никаких проблем со сборкой мусора, выполняя все это
Единственный способ буквально «получить ссылку на класс в моем основном проекте из класса в библиотечном проекте» — это отражение, которое является медленным и затрудняет обслуживание кода.
Комментарии:
1. Спасибо! Я знал, что я слишком много думал об этом. Основываясь на том, что вы сказали выше, я создал глобальный прослушиватель в библиотеке и подписался на него в своем основном классе, и теперь я могу вызвать свою функцию. Я не думаю, что с этим возникнут какие-либо проблемы с GC, верно? Кажется довольно эффективным. Я постоянно использую ваши образцы, они помогли мне решить несколько дилемм. Спасибо!
2. @ssuperz28: «Я не думаю, что с этим возникнут какие-либо проблемы с GC, верно?» — Извините, я не могу сказать.