Доступ к основному классу проекта из библиотечного класса

#android #eclipse

#Android #eclipse

Вопрос:

У меня есть проект Android, который использует проект библиотеки (все из которых я создал). Я использую ADT / SDK v14, и мне нужно получить доступ к основному классу в основном проекте и вызвать функцию, когда диалоговое окно в проекте библиотеки будет закрыто. Теперь я могу это сделать, если добавлю ссылку на свой основной проект в проект библиотеки, но это не идеально. Как мне получить ссылку на класс в моем основном проекте из класса в библиотечном проекте?

Вот как это работает:

  • В моем проекте есть мой основной класс, который является tabhost
  • Tabhost получает фрагменты для вкладок из проекта библиотеки
  • Один из фрагментов для вкладок запускает диалоговый фрагмент
  • Когда этот DialogFragment отклоняется, мне нужно вызвать функцию fillItems() в основном классе (вот где я застрял)

У кого-нибудь есть идеи?

Спасибо, Эд

Комментарии:

1. С точки зрения ООП вы не должны общаться таким образом. Вы не хотите, чтобы ваши библиотеки были тесно связаны с вашими основными проектами; они быстро станут «недоступными для совместного использования».

2. Да, я знал, что это не тот путь, и я пытался избежать этого, но я просто не мог понять, что мне нужно делать. Ответ ниже был тем, что мне нужно получить от него. Спасибо.

Ответ №1:

Как мне получить ссылку на класс в моем основном проекте из класса в библиотечном проекте?

В идеале, вы этого не делаете.

Вместо этого вы:

  1. Определите интерфейс в библиотеке, который содержит методы, которые вы хотите вызвать, реализация которых исходит из основного проекта
  2. Реализуйте этот интерфейс для некоторого вероятного класса в вашем основном проекте
  3. Предоставьте эту реализацию библиотеке через некоторый установщик или через аргумент конструктора
  4. Попросите библиотеку вызывать методы в реализации интерфейса по мере необходимости
  5. Убедитесь, что вы не создаете никаких проблем со сборкой мусора, выполняя все это

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

Комментарии:

1. Спасибо! Я знал, что я слишком много думал об этом. Основываясь на том, что вы сказали выше, я создал глобальный прослушиватель в библиотеке и подписался на него в своем основном классе, и теперь я могу вызвать свою функцию. Я не думаю, что с этим возникнут какие-либо проблемы с GC, верно? Кажется довольно эффективным. Я постоянно использую ваши образцы, они помогли мне решить несколько дилемм. Спасибо!

2. @ssuperz28: «Я не думаю, что с этим возникнут какие-либо проблемы с GC, верно?» — Извините, я не могу сказать.