2

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

4

1 回答 1

6

首先,这是我在这里的第一篇文章,所以我很勇敢,希望我能回答你的问题,并希望我一开始就不会进入负面数字。

请记住,我最近几天才发现 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 的 Activity。

但是,我想在这种情况下必须小心,因为 MyActivity 中的 testPojo 仍然为 null,因为 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>

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

于 2012-02-20T22:03:10.680 回答