簡體   English   中英

在循環中獲取 LiveData 轉換 android

[英]get LiveData Transformations in loop android

我從不同的端點、不同的存儲庫獲取所有類別。 那是給我所有的類別。 現在我想循環運行這些類別並編寫觀察者來獲取每個類別的所有項目。 換句話說 - 我想一一獲取所有類別的 FeedItem,因為我必須為每個類別觸發單獨的端點。 我有所有類別的列表。

我可以通過編寫下面的代碼來獲取單個類別的項目,但不知道如何獲取多個。

在 viewModal 中,我正在為單一類別觀察者執行以下代碼

  val categoryByIdItems: LiveData<Resource<List<FeedItem>>> = Transformations
        .switchMap(categoryByIdParam) { input ->
            input.ifExists { catId, shouldFetch ->
                feedRepository.loadCategoryByIdFeed(catId.toString(), shouldFetch)
            }
        }

如果我使用上面的代碼,它將通過調用加載 function 給我一個類別的 feedItems

fun load(categories:List<Category>,shouldFetch:Boolean = false){
    setCategoryByIdRequest(categories[0].id, shouldFetch)
}

我想根據類別在循環中運行 setCategoryByIdRequest,我可以這樣做。 我正在使用此代碼獲取片段文件中的第一類項目

viewModel.categoryByIdItems.observe(this, Observer { resource ->
})

如果我為viewModel.categoryByIdItems.observe運行循環而不是布局添加片段但由於相同的觀察者都是相同的。

但我不確定如何在片段中觀察到循環中的 categoryByIdItems。 作為 categoryByIdItems 我首先在視圖模式中定義並在片段中使用它,但我希望基於類別數量的動態。

對不起我的寫作,因為我不知道如何解釋更多來告訴你我想要什么。 我是 LiveData 和轉換的新手。 我沒有使用 DB,使用 apis 來獲取數據。 如果您想找到更多關於存儲庫、查看模式或片段的代碼,請告訴我,我會為您提供。

我建議您首先從 DB 獲取列表中的所有類別,然后使用 kotlin 過濾器按 ID 獲取,如下所示

@Query("SELECT * FROM categories_table") fun getAll(): LiveData<List>

視圖模型

private val _categories = DAO.getAll()

val categories : LiveData<Category>
   get() = _categories

活動/片段

viewModel.categories .observe(viewLifecycleOwner, Observer { it ->

if(it!=null){

//filter your data
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM