2017-06-12 5 views
0

複数の機能を使用してAndroidで「1分前」と「2分前に」表示する必要があります。問題は、接尾辞付き時間単位のマップがあることです。クロノタイムユニットから複数とシングルを取得

val suffixes = mapOf(
     ChronoUnit.WEEKS to context.getString(R.string.time_units_week), 
     ChronoUnit.DAYS to context.getString(R.string.time_units_day), 
     ChronoUnit.HOURS to context.getString(R.string.time_units_hour), 
     ChronoUnit.MINUTES to context.getString(R.string.time_units_minute), 
     ChronoUnit.SECONDS to context.getString(R.string.time_units_second) 
) 

そして私は、私はので、私はマップに時間値を渡すことができることを変換することができますどのようにこの

fun timeLabel(now: ZonedDateTime): String = temporalUnits 
     .map { Pair(it, targetTime.until(now, it)) } 
     .find { it.second > 0 } 
     ?.let { "${it.second} ${suffixes[it.first]}" } 

のようにそれを使用していますか?

+0

を供給することができますか?フォームが組み込まれていると私は驚いていますが、複数の単語を追加または削除すると、5つの単語すべてで機能します(すべての英語単語ではありませんが、必要はありません)。または、単数形と複数形の2つのマップを使用できます。 –

答えて

0

はそれを見つけ、あなたは、単に英語だけではリソース自体

private val suffixes = mapOf(
     ChronoUnit.WEEKS to R.plurals.time_unit_week, 
     ChronoUnit.DAYS to R.plurals.time_unit_day, 
     ChronoUnit.HOURS to R.plurals.time_unit_hour, 
     ChronoUnit.MINUTES to R.plurals.time_unit_minute, 
     ChronoUnit.SECONDS to R.plurals.time_unit_second 
) 

fun timeLabel(now: ZonedDateTime): String = temporalUnits 
     .map { Pair(it, targetTime.until(now, it)) } 
     .find { it.second > 0 } 
     ?.let { 
      val pluralResources = suffixes[it.first]!! 
      resources.getQuantityString(pluralResources, it.second.toInt(), it.second.toInt()) 
     } 
     ?: context.getString(R.string.time_unit_now) 
関連する問題