使用Roboguice将Android活动注入POJO

使用Roboguice将Android活动注入POJO,android,android-activity,guice,roboguice,Android,Android Activity,Guice,Roboguice,有没有办法使用Roboguice将Android活动子类注入POJO?首先,这是我第一次在这里发表文章,所以我很勇敢,希望我能回答你的问题,希望我一开始就不会出现负面数字 在过去的几天里,我刚刚发现了Roboguice,希望我能在这里提供帮助。另外,我第一次尝试使用.Net来使用Java,如果我的语法与通常的Java风格不符,我深表歉意 我想这取决于您想要的活动,创建Pojo实例的活动或其他活动 我将尝试在这里举一个例子,说明我的设置和尝试 public interface IMySecondA

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

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

在过去的几天里,我刚刚发现了Roboguice,希望我能在这里提供帮助。另外,我第一次尝试使用.Net来使用Java,如果我的语法与通常的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仍在构建中

我们还有另一种获取活动的方法,那就是使用提供者

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

public void Test()
{
  //This should retrieve your activity.
  Activity activity = activityProvider.get();
}
Provider-activityProvider;
公共TestPojo(提供者活动)
{
activityProvider=活动;
}
公开无效测试()
{
//这将检索您的活动。
Activity=activityProvider.get();
}
在TestPojo类中,以便稍后可以要求提供程序在其使用点检索活动

如果您知道pojo将要使用的活动类型,那么您可以使用
提供者


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

:)谢谢您花时间回复,而且回复的内容也非常详细。您确定提供给
TestPojo
构造函数的实例与
TestPojo
注入的
MyActivity
的实例相同,而不是
MyActivity
的新实例吗?不得要求RoboGuice创建新的Activity实例或任何其他Android framework管理的类,因为尽管RoboGuice很容易创建这些实例(特别是对于没有arg构造函数的类),但这些实例是不可用的,因为Android framework不知道它们的存在。这同样适用于您的替代解决方案。我不确定,在mo工作时,我必须检查,但我假设,当您的活动源自RoboActivity时,它将发挥神奇的作用,管理包含活动并将其注入TestPojo。我假设创建TestPojo实例的活动作为TestPojo构造函数的参数“Activity Activity”是MyActivity,因为我没有告诉它要创建什么,而且我在系统中有不止一个活动,roboguice没有抱怨任何不明确的活动需要解决,所以它给了我一个MyActivity,:-S-meh这有意义吗?抱歉,这里有很多假设。我也有一个想法,如果它是一个不同的活动,它不会被递归地卡住吗?因为每次创建一个新的TestPojo时,它都必须被创建,然后是另一个Activity。。。等等,我理解RoboGuice创建一个不由Android管理的活动的新实例是不好的。您是否打算使用此选项,以便RoboGuice需要知道是否存在由TestPojo创建的活动,并在Android框架请求此活动时让RoboGuice使用此选项?