Roboguice を使用して Android アクティビティ サブクラスを POJO に挿入する方法はありますか?
1 に答える
まず、これは私の初めての投稿なので、勇気を出してあなたの質問に答えられることを願っています。
ここ数日で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>代わりに使用できます。
これが役立つことを願っています:-)