You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Plurals正确用法及分钟复数适配问题求助

解决Android Plurals类型不匹配问题

核心问题分析

调用getQuantityString时要求传入int类型的数量参数,如果变量被推断为Any,说明代码未正确约束数值类型,导致类型不匹配报错。

步骤1:确认Plurals资源配置

确保res/values/strings.xml中的复数配置正确:

<plurals name="minute">
    <item quantity="one">%d minute</item>
    <item quantity="other">%d minutes</item>
</plurals>
<plurals name="hour">
    <item quantity="one">%d hour</item>
    <item quantity="other">%d hours</item>
</plurals>

步骤2:修正方法中的类型处理(Kotlin示例)

先定义枚举类:

enum class TimeType {
    MINUTES, HOURS
}

编写格式化方法,严格约束数值为Int类型:

fun formatTimeDurations(durations: List<Int>, timeType: TimeType): List<String> {
    return durations.map { duration ->
        val pluralResId = when (timeType) {
            TimeType.MINUTES -> R.plurals.minute
            TimeType.HOURS -> R.plurals.hour
        }
        // 直接传入Int类型的duration,避免类型歧义
        resources.getQuantityString(pluralResId, duration, duration)
    }
}

调用示例:

val formattedList = formatTimeDurations(listOf(1, 5, 10, 15, 30), TimeType.MINUTES)
// 输出结果:["1 minute", "5 minutes", "10 minutes", "15 minutes", "30 minutes"]

关键注意事项

  • 确保输入的durations列表元素类型为Int,如果原列表是混合类型,先做转换:durations.map { it as Int }
  • 不要在分支逻辑中让数值变量混入非Int类型,比如避免val title = if (...) duration else "invalid"这种写法,会导致title被推断为Any
  • getQuantityString的第二个参数是复数规则判断依据(必须是Int),第三个参数是字符串占位符的替换值,两者通常保持一致即可

内容的提问来源于stack exchange,提问作者Alex20280

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:35:50