2016-05-08 7 views
1

サンプル方式で更新されたオブジェクト:それはMosby examplesに基づいダガー2:範囲

enter image description here

。私はProjectオブジェクトをProjectFragmentProjectHistoryFragmentの間に共有したいと思います。@PerProjectスコープです。

ProjectModule:

@Module 
public class ProjectModule { 

    private Project project; 

    public ProjectModule(Project project) { 
     this.project = project; 
    } 

    @Provides 
    @PerProject 
    public Project provideProject() { 
     return project; 
    } 

} 

ProjectModuleProjectComponentProjectFragmentによって作成され、すべてのProject-dependent fragmentに共有されます。ニース。

しかし、問題があります。 Projectのタイトルを更新する必要がある場合はどうなりますか?私の場合、Projectはセッターのない最終的なオブジェクトです。 ProjectはProjectFragmentでしか変更できないので、将来の注入のためにmodule'sの値を更新してリセットすることができます。しかし、私はそれが悪い習慣だと思う。誰かがより良いアドバイスをすることはできますか

+0

@Alexandra、私のアプリケーション参照を通してダガー挿入オブジェクトを更新しようとしています。最初は値なしで設定されました。共有環境設定からオブジェクトを変更しようとしています。私はアプリケーションコードのすべての部分で値を再割り当てすることはできません。私にこれを達成するための貴重な解決策を与えてください。これを2日間実行してください。 –

+0

@SenthilMgは、この目的のためによく説明された別の質問を作成します:) – Alexandr

答えて

5

モジュール内の値を変更しないでください。

コンポーネント(およびそれに含まれるモジュール)には、必要な場所に注入する一連のオブジェクトがあります。それらはキャッシュされ、再利用されます。 オブジェクトを切り替えると、の状態が一貫しないになります。
オブジェクトを変更する必要がある場合は、新しいモジュールを使用して新しいコンポーネントを作成します。それでも、すべてを再作成せずにプロジェクトオブジェクトを変更する必要がある場合

、その後、Projectが変更された場合も、ユーザーに通知するために、いくつかのObservableパターンを実装する可能性がある、Projectそのものではなく、いくつかのProjectManagerを注入しないでください。こうすることで、プロジェクトを変更して変更に反応することができます。

+0

注射されたオブジェクトをアプリスコープから更新することができません。私は、短剣を使用してオブジェクトを再割り当てするための実現可能な方法を教えてください。この問題を2日間 –