2012-02-18 4 views

答えて

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); 
    } 
} 

だから私はITestPojoとIMySecondActivityをバインドする方法を知っているRoboGuiceためのモジュールを構成しています。

私たちは現在、MyActivityアクティビティを実行していると仮定します。これが起動すると、TestPojoのインスタンスが注入されます。この注入中にそのコンストラクタが呼び出され、TestPojoコンストラクタへのパラメータが解決され、IMySecondActivity MyActivityを含む。

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

あり、我々は活動を得ることができる別の方法もあり、それはプロバイダがポイントでのアクティビティを取得するために後で求められることができるようにプロバイダにTestPojoクラスで

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

public void Test() 
{ 
    //This should retrieve your activity. 
    Activity activity = activityProvider.get(); 
} 

を使用することですどこで使用された。

あなたのpojoが使用する予定のアクティビティタイプがわかっている場合は、代わりにProvider<MyActivity>を使用できます。

私はこれが助けてくれることを願っています:-)

+0

:)応答に時間をとってくれてありがとう。 'TestPojo'コンストラクタに提供されるインスタンスが、' TestActivity'の新しいインスタンスではなく、 'TestPojo'が注入されている' MyActivity'の** same **インスタンスであることを確かめますか? RoboGuiceは、Activityや他のAndroidフレームワーク管理クラスの新しいインスタンスを作成するように要求してはいけません。なぜなら、容易にそうするかもしれません(特に、引数なしのコンストラクタを持つクラスの場合)。存在。代替ソリューションにも同じことが言えます。 –

+0

私は確信しています。月の仕事で、チェックする必要がありますが、あなたの活動がRoboActivityから派生した場合、それを管理し、TestPojoにアクティビティを注入するという魔法を尽くします。 TestPojoのインスタンスを作成するActivityであると仮定しています。TestPojoコンストラクタのパラメータ "Activity activity"はMyActivityでした。作成する内容を教えていないので、システムでは、roboguiceは解決すべき不明確なActivtyについて不平を言っていないので、私にMyActivityを与えました:-S mehは合理的ですか?申し訳ありません2ここでは多くの前提があります。 – RichardWilliams

+0

また私はちょうど考えを持っていましたが、別のアクティビティであれば再帰的に立ち往生しませんでした。新しいTestPojoを作成するたびに作成する必要があり、別のActivty ...などと思っていました。 RoboGuiceがAndroidで管理されていないアクティビティの新しいインスタンスを作成するのが悪いRoboGuiceがTestPojoによって既に作成されているアクティビティがあるかどうかを知る必要があり、アンドロイドフレームワークがこのアクティビティを求めているときにRoboGuiceがこれを使用するように、これを使用しますか? – RichardWilliams

関連する問題