我正在尝试在 forEach 循环中更新 UI,但程序在第一次迭代期间在按钮上调用 setEnabled() 后退出循环。
private var prod1Allowed = false
private var prod2Allowed = false
override fun onCreate(savedInstanceState: Bundle?) {
//...
startConnection()
//...
}
// Manages connection to Google Billing API
fun startConnection(){
billingClient().queryPurchasesAsync(
BillingClient.SkuType.INAPP
) { billingResult, productList ->
Log.d(TAG, "The ${productList.size} owned products are ${productList.map { it.skus }}"
)
productList.forEach {
Log.d(
TAG,
"Current product is ${it.skus}"
)
if (it.skus.contains(PROD_1)) {
prod1Allowed = true
binding.prod1Button.setEnabled(true)
Log.d(TAG, "Prod 1 is allowed") // from here on not shown
}
if (it.skus.contains(PROD_2)) {
prod2Allowed = true
binding.prod2Button.setEnabled(true)
Log.d(TAG, "Prod 2 is allowed")
}
}
}
}
输出:
<块引用>拥有的 2 个产品是 [[prod_1], [prod_2]]
<块引用>当前产品是 [prod_1]
我也尝试过使用 for (it in productList)
但循环也在同一位置退出。
如果我不执行 setEnabled
,我可以看到下一个元素被迭代。
Android Studio 没有发出警告(运行时也没有异常,初始化绑定也没有空指针异常),this answer on SO 解释说可以更改在 lambda 之外定义的变量。>
所以 setEnabled()
调用似乎阻止了我的循环不按应有的方式流动,但在运行时没有错误。可以做什么?
感谢任何帮助