2017-02-13 8 views
0

私はMVPアーキテクチャを使用してAndroidアプリケーションを作成しています。 PresenterとInteractorのクラスを作成しました。私は、アプリがバックグラウンドでフォアグラウンドに戻ったときにUIを更新するのに苦労しています。アプリがバックグラウンドの間にコールバックのUIを更新するにはどうすればよいですか?

以下のシナリオを考えてみましょう。

UIのボタンをクリックし、発表者に通知します。 Presenterは、バックエンドからのデータを提供するようにInteractorに依頼しました。インタラクタがプレゼンターに結果を提供するまでには、何とかUIがバックグラウンドにあります。アプリケーションがフォアグラウンドになったら、その状態を保存してUIコンポーネントを変更するにはどうすればよいですか。

私は、次のことをやってみました:フラグをオンにすると、コールバックを受信したときに呼び出されることになっメソッドを呼び出すためにonResumeにチェック(フラグを使用して

  1. しかし、問題は、それは私が5を持っている場合のは言わせています。その後、私はJavaリフレクションを使用して、私はそれを好きではない5つのフラグ)
  2. が必要になります別のコールバックを持っているプレゼンターによって呼び出すことができるさまざまなサービス(パラメータとHashMapの中で呼び出されるメソッドの名前を格納します)

より良いWAはありますか?これを達成するためにy?

+0

あなたに関連する、現在あなたがその初期状態や将来に加入任意の時点でのデータを表示される応答を与えるBehaviorRelayまたは反応性データベースに登録あなたが共有することができ – EpicPandaForce

+0

@EpicPandaForceを変更しますどのような例ですか? – Rahil2952

答えて

0

あなたのプレゼンターに、いくつかの「一時停止」のロジックを追加することができます。

  • UIがバックグラウンドに行くたび、あなたは(可能性があり、「一時停止」にプレゼンターを伝え、キャッシュに受信されているすべてのデータを保存しますプレゼンターの中のリストと同じくらい簡単です)。
  • UIがフォアグラウンドに戻ったときはいつでもプレゼンターにポーズ解除とUIへのキャッシュのアンロードを指示します(キャッシュリストがヌルでない場合は、インタラクタが受け取った通常のレスポンスのようにUIにプッシュします)
0

名前MVPはモデル表示プレゼンター モデル:モデルはPOJOとも呼ばれるゲッターセッターメソッドを実行します。 ビュー:ビューを含むアクティビティ/フラグメントが含まれます。 プレゼンター:ネットワークコールを通信できる、またはSQLite/MySqlなどのバックエンドデータベースに関連する実際のビジネスロジック。

ボタンをクリックすると、バックグラウンドタスクを実行するプレゼンターに電話をする必要があります。応答がインターフェイスの助けを借りて行われたCallBacks経由で成功/失敗であることをあなたのビューに通知する必要があります。

例:

interface BaseContract { 
     interface BaseView { 
      //Methods for View 
      void onDoSomething(); 
     } 

     interface BasePresenter { 
      void doSomething(); 

     } 
    } 

    class BaseMainPresenter implements BaseContract.BasePresenter { 
     BaseContract.BaseView view; 

     BaseMainPresenter(BaseContract.BaseView view) { 
      this.view = view; 
     } 

     @Override 
     public void doSomething() { 
      if (view != null) 
       view.onDoSomething(); 
     } 
    } 

    class DemoClass implements BaseContract.BaseView { 

     //Create object of Presenter 

     /**** 
     * Example : 
     * BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this); 
     */ 
     @Override 
     public void onDoSomething() { 
      //Deal with Context here. 
     } 
    } 
関連する問題