【问题标题】:get LiveData Transformations in loop android在循环android中获取LiveData转换
【发布时间】:2020-11-11 04:04:34
【问题描述】:

我从不同的端点、不同的存储库获取所有类别。那是给我所有的类别。现在我想循环运行这些类别并编写观察者来获取每个类别的所有项目。 换一种说法 - 我想一一获取所有类别的 FeedItems,因为我必须为每个类别触发单独的端点。我有所有类别的列表。

我可以通过编写下面的代码来获取单个类别的项目,但不知道如何获取多个。

在 viewModal 中,我正在为单个类别观察者执行以下代码

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

如果我使用上面的代码,它会通过调用加载函数给我一个类别的 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 来获取数据。如果您想找到更多关于存储库、查看模式或片段的代码,请告诉我,我会为您提供。

【问题讨论】:

    标签: android kotlin repository android-livedata observers


    【解决方案1】:

    我建议你先从 DB 中获取列表中的所有类别,然后使用 kotlin 过滤器按 ID 获取,如下所示

    @Query("SELECT * FROM categories_table") 有趣的 getAll(): LiveData

    视图模型

    private val _categories = DAO.getAll()
    
    val categories : LiveData<Category>
       get() = _categories
    

    活动/片段

    viewModel.categories .observe(viewLifecycleOwner, Observer { it ->
    
    if(it!=null){
    
    //filter your data
    })
    

    【讨论】:

    • 我想你误会了..我已经在使用不同端点的列表中拥有所有类别数据,我想使用不同的端点和存储库获取类别的帖子。所以我想像我在问题中所说的那样运行一个循环。
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多