使用Roboguice将Android活动注入POJO
有没有办法使用Roboguice将Android活动子类注入POJO?首先,这是我第一次在这里发表文章,所以我很勇敢,希望我能回答你的问题,希望我一开始就不会出现负面数字 在过去的几天里,我刚刚发现了Roboguice,希望我能在这里提供帮助。另外,我第一次尝试使用.Net来使用Java,如果我的语法与通常的Java风格不符,我深表歉意 我想这取决于您想要的活动,创建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
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使用此选项?