2

Roboguice を使用して Android アクティビティ サブクラスを POJO に挿入する方法はありますか?

4

1 に答える 1

6

まず、これは私の初めての投稿なので、勇気を出してあなたの質問に答えられることを願っています。

ここ数日で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);
  }
}

そこで、ITestPojo と IMySecondActivity をバインドする方法を知るために、RoboGuice のモジュールを構成しました。

現在 MyActivity アクティビティを使用しているとします。これが起動すると、TestPojo のインスタンスが注入されます。この注入中に、そのコンストラクターが呼び出され、TestPojo コンストラクターへのパラメーターが解決されます。バインディングを介した IMySecondActivity と、それを含む MyActivity の Activity です。

ただし、TestPojo はまだ構築中であるため、testPojo は MyActivity 内で null のままであるため、この状況には注意が必要です。

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 に答える