2016-12-12 5 views
0

自分のAndroidコードでDagger2 DIを学習し、自分のアクティビティで電話アクティビティを呼び出すインテントを作成します。自分のアクティビティにインテントクラスを挿入できるのでしょうか?私は、このコードのようなテントの意図=新しいテント()を使用する必要がいけない:私はプレゼンターを注入ようDagger2を使用してインテントのAndroid依存性注入

Intent call=new Intent(Intent.ACTION_DIAL); 
    call.setData(Uri.parse("tel:" + textView.getText().toString())); 
    startActivity(call); 

は私が意図を注入することはできますか?

@Inject 
DetailScreenPresenter detailScreenPresenter; 

はあなただけインスタンス化さ意向を注入し、残りを自分で設定する必要があり

+0

インテントを注入することでどのような利点が得られますか? –

+0

アクティビティクラスを独立した状態に保つために、多分?それは不可能なのですか? – user1290932

+1

確かに可能です。私は、モックインテントアクションでテストするなど、あなたがこれをやりたい特定の理由があるのか​​、あるいは理想的には 'new'の使用を排除しようとしているのかを理解しようとしています。 –

答えて

0

に答えるいただき、誠にありがとうございます。 は、すでに注入される前にアクションを実行するサービスやアクティビティを注入しないでください。悪いコード設計であり、デバッグが難しくなります。

は、注入あなたが @Providesでモジュール内のメソッドに注釈を付けていることを確認してください、あなたが @singletonと注釈を付けていない ことを確認します。注入するたびに新しいインスタンスが返されます。

public class IntentDialer extends Intent { 

    public IntentDialier() { 
     super(Intent.ACTION_DIAL); 
     ... 
    } 
} 

@Module 
public class ProviderModule { 

    @Provides 
    IntentDialer provideIntentDialer() { 
     return new IntentDialer(); 
    } 
} 

intentDialer.setData(myUrl.toString()); 
doSomething(intentDialer);