【问题标题】:How to return boolean value in lifecycleScope.launch如何在生命周期Scope.launch 中返回布尔值
【发布时间】:2021-09-13 04:46:18
【问题描述】:

我有一个 corountine,我使用了生命周期Scope.launch,我希望它返回一个布尔值。我该怎么做?

fun updateDb(restaurantEntity: RestaurantEntity, mode: Int): Boolean {
    val db =
        Room.databaseBuilder(requireContext(), RestaurantDatabase::class.java, "restaurant-db")
            .build()

    lifecycleScope.launch { 
        when (mode) {
            1 -> {
                val restaurant: RestaurantEntity =
                    db.restaurantDao().getAllRestaurant(restaurantEntity.restaurant_Id)
                db.close()
                return@async true
            }

            2 -> {
                db.restaurantDao().insertRestaurant(restaurantEntity)
                db.close()
                true
            }

            3 -> {
                db.restaurantDao().deleteRestaurant(restaurantEntity)
                db.close()
                true
            }
        }
    }
    return false
}

我使用 return@async true 并使用 return true 并且只是 true,它们都不起作用。

【问题讨论】:

  • 您能补充更多信息吗?什么是布局? spinner 和 recyclerview 是不同的东西,所以你想如何同时触发两者。需要更多信息来了解问题。
  • 我添加了几行代码@MohitAjwani
  • 嘿@yazhini,请考虑添加 entier viewHolder 和 onBindViewHolder 代码,并在提问时始终尝试提供简洁和所有相关信息/代码。所以这里的社区可以为您提供更好的帮助。
  • 我上传了整个代码@ParagPawar
  • 还不完整,请贴出整个适配器代码和布局,我们无法知道列表的类型是什么以及视图层次结构如何。

标签: android xml android-studio kotlin


【解决方案1】:

根据您在 cmets 中描述的内容,我认为实现此目的的最佳方法是在您的 OrderViewHolder 中创建一个变量,该变量将存储 finalPrice,以便您可以在您的 Adapter 中使用它。类似的东西:

class OrderViewHolder(
    itemView: View
) : RecyclerView.ViewHolder(itemView) {

    // Init finalPrice
    var finalPrice: Int = 0

    override fun onItemSelected(
        parent: AdapterView<*>?,
        view: View?,
        position: Int,
        id: Long
    ) {

        // calculate finalPrice 
        finalPrice = (currentPrice * quantity!!).toString()
    }

}

然后你可以在你的适配器中访问finalPrice:

override fun onBindViewHolder(
    holder: OrderViewHolder, 
    position: Int
) {

    // Access finalPrice like ->
    holder.finalPrice

}

【讨论】:

  • 当我这样做时,onBindViewHolder() 中的值始终保持为 0
  • 其实每道菜的最终价格都是计算出来的,计算出来之后的总价就是total += holder.finalPrice
  • 该值始终为 0,因为您可能只是直接复制粘贴它而没有应用设置价格所需的计算或初始化。据我了解,您假设有 5 道菜的适配器,根据选择的数量,它的价格会发生变化,并且您有一个根据用户选择显示的总价格?对吗?
  • 是的。这就是我想做的事
  • 该死,我在那个适配器中看到了这么多错误的东西......你为什么要在适配器的代码中添加所有内容?那是大错特错了。我猜那个按钮和你在构造函数中传递的视图是你的活动/片段视图的一部分,而不是 ViewHolder 本身。适配器不应该接触不属于其范围的视图,甚至不应该启动活动。
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多