Внедрение активности Android в POJO с Roboguice - PullRequest
2 голосов
/ 18 февраля 2012

Есть ли способ внедрить подкласс Android Activity в POJO, используя Roboguice?

1 Ответ

6 голосов
/ 21 февраля 2012

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

Не берите в голову, что у меня естьтолько что обнаружил Roboguice за последние пару дней, так что я надеюсь, что смогу помочь здесь.Также мой первый удар по Java от использования .Net, так что я извиняюсь, если у меня неправильный синтаксис для обычного стиля Java.

Я думаю, это зависит от того, какое действие вы хотите, действие, которое создает экземпляр объекта.Pojo или другое занятие.

Я постараюсь привести здесь пример того, что я настроил и опробовал.

public interface IMySecondActivity {}
public class MySecondActivity extends RoboActivity implements IMySecondActivity {}

public interface ITestPojo {}
public class TestPojo implements ITestPojo 
{
  @Inject public TestPojo(IMySecondActivity mySecondActivity, Activity activity)
  {
    //So at this point here mySecondActivity is an instance of IMySecondActivity    
    //set up by roboguice
    //and activity is the activity which created this TestPojo
  }
}

public class TestAppModule extends AbstractAndroidModule 
{
  @Override protected void configure()
  {
    bind(ITestPojo.class).to(TestPojo.class);
    bind(IMySecondActivity.class).to(MySecondActivity.class);
  }
}

public class MyActivity extends RoboActivity implements IMyActivity
{
  @Inject ITestPojo testPojo;

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
}

Поэтому я настроил модуль для RoboGuice, чтобы узнать, каксвязать ITestPojo и IMySecondActivity.

Предположим, что в данный момент мы находимся на активности MyActivity, когда она запускается, в нее внедряется экземпляр TestPojo. Во время этой инъекции вызывается его конструктор, и параметры конструктора TestPojo разрешаются, IMySecondActivity через привязкуАктивность из содержащей MyActivity.

Однако, я думаю, что в этой ситуации нужно будет позаботиться, так как testPojo по-прежнему будет нулевым внутри MyActivity, поскольку TestPojo все еще находится в разработке.

Существует такжедругим способом мы могли бы получить Activity, а именно использовать Provider

Provider<Activity> activityProvider;
public TestPojo(Provider<Activity> activity)
{
  activityProvider = activity;
}

public void Test()
{
  //This should retrieve your activity.
  Activity activity = activityProvider.get();
}

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

Если вы знаете тип деятельности, которую будет использовать ваше pojo, тогда вы можете использовать Provider<MyActivity>.

Надеюсь, это поможет: -)

...