首页 > 解决方案 > 如何在生命周期Scope.launch 中返回布尔值

问题描述

我有一个 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和 just true,它们都不起作用。

标签: androidxmlandroid-studiokotlin

解决方案


根据您在评论中描述的内容,我认为实现此目的的最佳方法是在您的变量中创建一个变量,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

}

推荐阅读