2017-07-21 27 views
-1

Ich möchte eine Produktliste in meiner Android-Anwendung mit Android neue Architektur-Komponenten zeigen. Ich habe eine Pojo Klasse Products wie unten genannt:Android LiveData Änderung prob

public class Products { 

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

Der Webservice gibt die Liste mit Paginierung:

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

jede Produktliste Anruf Also, ich bin immer einen Satz Produktliste mit anderen Daten. Ich habe bereits definierte Methode die gleiche in ProductListRepository zu nennen:

public class ProductListRepository { 
    @Inject 
    ProductService mProductService; 

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

Aber ich bin vor Problem der Livedata in ProductViewModel einzustellen, weil ich die Liste der ProductDetails mit älteren zusammenführen möchten und auch den Wert des Updates andere Variablen in Products wie 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; 
} 

}

Kann mir jemand helfen?

+0

Was ist die Idee hinter "MediatorLiveData"? Es ist nicht klar aus dem Code. –

+0

@Eugene Krivenja Ich denke, um die LiveData zu ändern, brauche ich MediatorLiveData. Wenn es nicht erforderlich ist, lassen Sie mich bitte die Lösung wissen. –

+0

nur zu ändern, 'MutableLiveData' ist genug. –

Antwort

1

Um nur Daten zu ändern, mProductsMutableLiveData<Products> sein kann, und der Code wie folgt:

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 wurde entwickelt, um mehrere LiveData Quellen zu beobachten.

+0

Ja, Sie haben Recht. Es ist nur mein Fehler. –