使用Roboguice将Android活动注入POJO

时间:2012-02-18 11:09:00

标签: android android-activity guice roboguice

有没有办法使用Roboguice将Android Activity子类注入POJO?

1 个答案:

答案 0 :(得分:6)

首先这是我在这里发表的第一篇文章,所以我很勇敢,希望我能回答你的问题,希望我一开始就不会出现负数。

请记住,我在过去几天才刚刚发现了Roboguice,所以希望我能在这里帮忙。如果我对通常的Java风格有不正确的语法,那么我第一次尝试使用.Net这么多道歉。

我想这取决于你想要的Activity,创建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通过绑定和Activity来自包含MyActivity。

但是,我想在这种情况下必须要谨慎,因为testPojo在MyActivity中仍然是null,因为TestPojo仍在构建中。

还有另一种方法可以获得活动,即使用提供者

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>代替。

我希望这会有所帮助: - )