如何实现从一个到另一个android的周变化



面对这样一项任务:我正在为一所大学制作一款应用程序,每周(周一00:00开始(都有自己的名字:分子和分母。假设当前一周是分子,下一周是分母,然后是分子,以此类推

我不明白如何使类型(分子或分母(每周都显示在我的片段上,好吧,最好在周日00:00将该周分别更改为分子或分母。我正在使用Kotlin

我会在ViewModel中执行此操作。暴露具有布尔值的LiveData,其中true/false与分子周或分母周相对应。选择一个任意的星期一日期作为计算当前日期的基准。我武断地使用本周的星期一作为这个基准时期。

然而,这种方法假设大学的日历永远不会打破这种模式。如果它们的模式不一致,则需要一个数据表来查找要使用的值。

class MyViewModel : ViewModel() {
companion object {
private val WEEK_TYPE_BASELINE_DAY = LocalDate.of(2021, 11, 1)
}
private val mutableWeekType = MutableLiveData<Boolean>()
val weekType: LiveData<Boolean> get() = mutableWeekType
init {
updateCurrentWeekType()
}
private fun updateCurrentWeekType() {
val today = LocalDate.now()
val weeks = ChronoUnit.WEEKS.between(WEEK_TYPE_BASELINE_DAY, today)
mutableWeekType.value = weeks % 2 == 0L
// In case week changes while this ViewModel is alive, queue next update.
val nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
val nextMondayMidnight = LocalDateTime.of(nextMonday, LocalTime.MIDNIGHT)
viewModelScope.launch {
delay(ChronoUnit.MILLIS.between(LocalDateTime.now(), nextMondayMidnight))
updateCurrentWeekType()
}
}
}

片段可以观察weekType,并根据它接收到的是true还是false来修改任何UI元素的文本。

我想要真正正确地做到这一点,还应该为android.intent.action.TIMEZONE_CHANGED注册一个BroadcastReceiver,并在时区更改时调用更新函数。

最新更新