Ссылка на объект проекта из проекта библиотеки - PullRequest
2 голосов
/ 25 мая 2011

У меня есть игра, которую я построил, которая будет иметь 2 версии.Один "облегченный" и один "полный".Для этого я поместил большую часть кода в библиотечный проект.

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

Что я сделал, чтобы решить его, так это создать фиктивный класс для действия в рамках проекта библиотеки, но, вероятно, это неправильный путь.

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Если вы говорите, что некоторая часть проекта библиотеки зависит от класса, который будет иметь одну реализацию в одном проекте приложения и другую или, возможно, несуществующую реализацию в другом проекте приложения, то я подозреваю, что простой интерфейс поможет.

Объявите интерфейс в проекте библиотеки и измените все ссылки в этом проекте на ваш интерфейс.В проектах приложения предоставьте различные классы, которые реализуют этот интерфейс и изменяют свое поведение в зависимости от того, является ли он легким или полным.

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

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

В проекте библиотеки объявите интерфейс для AdBannerProvider:

public interface AdBannerProvider
{
    public void InjectAd(ViewGroup v);
}

В разделе Действия в проекте библиотеки, для которого может потребоваться объявление, в зависимости от того, горит или полный, ссылкаинтерфейс как в:

private void getAdBanner(AdBannerProvider pProvider, ViewGroup pAdView)
{
     pProvider.InjectAd(pAdView);
}

Затем в версии Lite предоставьте реализацию AdBannerProvider, которая делает правильные вещи для этой редакции:

public class LiteAdBannerProviderImpl implements AdBannerProvider {
   @Override
   public void InjectAd(ViewGroup v) {
          // do something useful for the lite edition, like add an imageview to the passed viewgroup
   }
}

А в полной редакции другаякласс делает то, что нужно для этого издания:

public class FullAdBannerProviderImpl implements AdBannerProvider {

    @Override
    public void InjectAd(ViewGroup v) {
        // do something useful for the full edition, like maybe set the viewgroup to GONE or INVISIBLE
    }
}
1 голос
/ 25 мая 2011

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

Intent intent=new Intent();
intent.setComponent(new ComponentName("com.pkg", "com.pkg.class"));
startActivity(intent); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...