2017-12-21 8 views
0

私は、顧客の詳細を「顧客」テーブルからロードし、いくつかの詳細、つまり顧客の所在地を編集できる顧客詳細ページを持っています。顧客のロケーションは、ドロップダウンアイテムが「ロケーション」テーブルからロードされるスピナーです。アンドロイドのビューモデル間の相互通信

だから私の現在の実装では、私はCustomerViewModelとLocationViewModel

を持っCustomerActivityを持っている
public class CustomerActivity extends AppCompatActivity { 
    ... 
    onCreate(@Nullable Bundle savedInstanceState) { 
     ... 
     customerViewModel.getCustomer(customerId).observe(this, new Observer<Customer>() { 
     @Override 
     public void onChanged(@Nullable Customer customer) { 
      // bind to view via databinding 
     } 
     }); 

     locationViewModel.getLocations().observe(this, new Observer<Location>() { 
     @Override 
     public void onChanged(@Nullable List<Location> locations) { 
      locationSpinnerAdapter.setLocations(locations); 
     } 
     }); 
    } 
} 

私の質問は、私は両方からのonChangedイベントの両方以来、「顧客」テーブルから値を持つ場所スピナーを設定しない方法ですviewmodelsの実行順序が異なる場合があります(顧客の読み込み速度が速く、他の場所の読み込み速度が速い場合もあります)。

私は、顧客がロードされた後でのみ場所をロードすると考えましたが、とにかく「顧客」表の値を顧客のロケーションスピナーに入力しているときに同時にロードできますか?

答えて

0

はい、フラグを使用することができます。

public class CustomerActivity extends AppCompatActivity { 
    private Customer customer = null; 
    private List<Location> locations = null; 
    ... 
    onCreate(@Nullable Bundle savedInstanceState) { 
     ... 
     customerViewModel.getCustomer(customerId).observe(this, new Observer<Customer>() { 
     @Override 
     public void onChanged(@Nullable Customer customer) { 
      // bind to view via databinding 
       this.customer = customer; 
       if(locations != null){ 
       both are loaded 
       } 
     } 
     }); 

     locationViewModel.getLocations().observe(this, new Observer<Location>() { 
     @Override 
     public void onChanged(@Nullable List<Location> locations) { 
      locationSpinnerAdapter.setLocations(locations); 
       this.locations = locations; 
       if(customer != null){ 
       //customer and locations loaded 
       } 
     } 
     }); 
    } 
} 
関連する問題