2017-06-11 13 views
0

私はDataModuleの魔女が開始アンドロイドでオブザーバブルを終了するのを待つ方法は?

public void onCreate() { 
    DataModel.loadData().doOnSuccess(this::bindData) 
     .subscribe() 
    ... 

上のデータを必要とするいくつかの方法

static Single<DataModel> loadData(); 

はまた、活動の魔女があるのDataModelを提供していも活動があまりにもデータを必要とするコールバックを持ついくつかのUIのボタンを、持っています

public void onViewCreated(View v..) { 
    v.findViewById(R.id..).setOnClickListener(this::updateViewX) 
    v.findViewById(R.id..).setOnClickListener(this::updateViewX) 
} 


void updateViewX() { 
    DataModel.loadData().doOnSuccess(dataModel -> /** somehow updating ui **/) 
      .subscribe() 
} 

void updateViewY() { 
    DataModel.loadData().doOnSuccess(dataModel -> /** somehow updating ui **/) 
      .subscribe() 
} 

このコードスニペットでは、同じデータがボタンクリックで毎回読み込まれます。 私がしたいことにある:それはロードし、(ボタンが押された場合 - コールバックはデータを待つ必要があります)だけにして、コールバックを実行するまで

  1. 負荷データ一度だけ
  2. のonCreateで待機

いくつかのアイデアで私を助けてください

答えて

0
DataModel.loadData().subscribe({dataModel -> /** somehow updating ui **/}); 

あなたが使用してサブスクライブする必要がObservablesubscribe()の方法でActionを使用します。

+0

subscribeまたはdoOnSuccessでイベントを処理する大きな違いはないと思います。 残念ながら、両方ともユーザーがボタンを押すたびにloadDataが実行されます。 –

+0

次に、データがバインドされるまでボタンを非表示にすることができます。結束した後、それらを見せてください。または、無効/有効にします。 'RxBinding'を使ってリアクティブビューを作成する場合は、' combileLatest() 'を使うことができます。 –

+0

私は何をしたいのですか?データローディングが完了する前にボタンが押されていれば、データのロードが成功した後にボタンのコールバックが遅れて実行されます –

関連する問題