2016-08-17 18 views
0

私はボレー(もう一度)に問題があります。クラスでボレーリクエストを実行したいので、複数のアクティビティで結果をフィードバックしてUIを更新することができます。私はそれにデータを返し、UIから要求を呼び出すが、今は新しいデータでUIを更新しようとしている。私は答えを見てきましたが、私は構造を理解しようとしていると私はいくつかは、私はあなたが存在として意味を理解想定し、それ別のクラスからのボレーリクエストによるUIの更新

+1

"今、新しいデータでUIを更新するのに苦労しています" - どのように苦労していますか? – TWL

+1

私はVolleyが何であるか分かりませんが、あなたは 'BroadcastReceiver'のようなものが必要なように思えます。ライブラリを使ってうれしいのなら、 'EventBus'のようなものは完全に健全ですか? – Subby

+0

こんにちは、収集されたデータで情報を更新しません。ビューをロードしてデータを取得して停止しますが、取り出されたデータはUIに挿入されません。 – Boo

答えて

1

を通して私の話/助言してくださいすることができ、損失で午前:

Aバレーボール要求戻り、あなたは通常、そこにあるため、通常は(何をすべきか、呼び出し側の活動はすべてが含まれていると仮定すると、これは非常に一般的な例であることを思い出させ、この場合、いくつかの活動

を介して設定いくつかのデータを更新ケースの例外です)、挿入されたばかりですUIホルダーに含まれるデータセットにデータを追加します(例:あなたのリサイクルアダプタ)と、それを更新し、例としては、これと同様の方法を保持するアダプタ次のようになります。

public void updateDataSet(List<Item> items) 
{ 
    //mItemList is the adapters member list 
    if (null != mItemList) 
    { 
     mItemList.clear(); 
     mItemList.addAll(items); 
    } 
    else 
     mItemList = items; 

    notifyDataSetChanged(); 
} 

あなたが要求を発射する直前に、すべてを初期化してください、あなたは以前に解雇要求コールバック内でこれを呼び出します、例えば別の場所で

@Override 
public void onResponse(JSONObject response) 
{ 
    Log.d(TAG + ": ", "somePostRequest Response : " + response.toString()); 
    // here you need to parse to JSON to a list and then call... 
    List<Item> items = parseResponse(response); 
    myAdapter.updateDataSet(items); 
    } 

さて、あなたはいくつかの活動に

Aバレーボール要求戻った何を意味するのかと、私はそれがものを更新したい

オプションのカップルがあります:

  1. 誰かがコメントで述べたように、EventBusに行くことができます。
  2. グローバルシングルトンであるDataManagerクラスを保持することができます。この場合、データを保持してそこで更新することができます。次に、すべてのアクティビティ(onResumeまたは他の関連するライフサイクルメソッド)がそのデータをプルする。
  3. 他のUIパート(Fragmentsなど)への参照を保持し、データを渡して更新をトリガーするメンバーメソッドをトリガーするDataManager以外は、オプション2と同じことができます。

個人的に私はオプション3が厄介で多少悪い習慣を見出しますが、他のすべてが失敗した場合(それはしてはならないが、そうであれば)試してみることができます。

さらに多くのオプションがありますが、それはデータ、アプリケーションのアーキテクチャ、コーディングスタイルなどに応じて異なります。

希望すると便利です。

+0

これは非常に役に立ちます。テクニックのいくつかを試して、どちらが私のために働くのかを見ていきます。 - (それは関連する答えの第2部でした)私のおしゃべりな質問に申し訳ありません、私はその時点で非常に強調されたhaha。あなたの入力と時間のために多くのありがとう – Boo

0

EventBusを使用できます。 EventBusを使用するには、更新を受け取るクラスを登録する必要があります。また、すべてのクラスがイベントを受け取るクラスのイベントを公開するときにクラスを登録する必要があります。ここで Flow Diagram

greenrobotのEventBus使った例です:

イベントモデルを:

public class MessageEvent { 
    /* Additional fields if needed */ 
} 

は購読:

EventBus.getDefault().register(this); // In Activity onCreate method 

@subscribe 
public void onMessageEvent(MessageEvent event){ 
    // this is the method to receive event 
} 

は、イベントを公開:

EventBus.getDefault().post(new MessageEvent()); 

今、このイベントモデルに登録されているすべてのクラスが更新されます。 注:購読しているクラスは生きていなければなりません。誰かが破壊された場合、更新は受けられません。

関連する問題