2017-07-21 15 views
-1

AndroidアプリケーションでAndroidの新しいアーキテクチャコンポーネントを使用して製品リストを表示したいのですが、Android LiveData Modification prob

public class Products { 

    private List<ProductDetails> products = null; 
    private Integer onSaleCount; 
    private Integer total; 
    private Integer page; 
......................... 
} 

Webサービスページネーションとのリストを返します:以下のようなProductsという名前のPOJOクラスは、私がしている

@GET("/products/") 
Call<Products> getProducts(@Query("page") int page) 

したがって、各製品リストコールを、私は他のデータと1セット商品の一覧を取得しています。 私はすでにProductListRepositoryで同じことを呼び出すメソッド定義されています:

public class ProductListRepository { 
    @Inject 
    ProductService mProductService; 

    public Products getProductList(int pageNo) { 
     ....................... 
     .................. 
    } 
} 

をしかし、私は古いものでProductDetailsのリストをマージし、またの値を更新したいので、私はProductViewModelにLiveDataを設定するために、問題に直面していますProductsの他の変数は、onSaleCount,pageNoのようになります。

public class ProductListViewModel extends ViewModel { 

private final ProductListRepository mProductListRepository; 
private MediatorLiveData<Products> mProducts; 

    public void getProductList(int pageNo) { 

    Products products = mProductListRepository.getProductList(pageNo); 
    if(products==null){ 
     mProducts.setValue(products); 
    }else{ 
     // **How to add old List and new List and set it to LiveData** 
    } 
    return mProducts; 
} 

}

誰も私を助けることができますか?

+0

そこに 'MediatorLiveData'を使用する背景は何ですか?コードからは分かりません。 –

+0

@Eugene Krivenja私はLiveDataを変更すると思います、私はMediatorLiveDataが必要です。必要でない場合は、解決策を教えてください。 –

+0

のみ変更するには、 'MutableLiveData'で十分です。 –

答えて

1

はちょうどmProductsMutableLiveData<Products>することができ、データを変更するには、このようなあなたのコード:

public void getProductList(int pageNo) { 

    Products products = mProductListRepository.getProductList(pageNo); 
    if (products == null) { 
    // Nothing to do, no new data 
    } else { 
    Products oldProducts = mProducts.getValue(); 
    // merge oldProducts and products into newProducts, as you prefer 
    mProducts.setValue(newProducts); 
    } 
} 

MediatorLiveDataは、複数のLiveDataソースを観察するために設計されています。

+0

はい、あなたは正しいです。それはちょうど私の間違いです。 –

関連する問題