如何实现从一个到另一个android的一周变化
Posted
技术标签:
【中文标题】如何实现从一个到另一个android的一周变化【英文标题】:How to implement a change of week from one to another android 【发布时间】:2021-12-18 03:56:14 【问题描述】:面对这样一个任务:我正在为一所大学制作一个应用程序,每周(从星期一 00:00 开始)都有自己的名称:分子和分母。假设当前周是分子,下周是分母,然后是分子,依此类推。
我不明白如何每周在我的片段上显示类型(分子或分母),好吧,最好在周日 00:00 将一周分别更改为分子或分母。我正在使用 Kotlin
【问题讨论】:
【参考方案1】:我会在 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()
fragment 可以观察weekType
并根据接收到的真假来修改任何 UI 元素的文本。
我想这确实是正确的,您还应该为android.intent.action.TIMEZONE_CHANGED
注册一个广播接收器,并在时区更改时调用更新函数。
【讨论】:
哇,效果很好,但是这个方法只适用于 API >= 26,如何在 API 使用 desugaring 可以访问旧版本 Android 上的 Java 8 库。以上是关于如何实现从一个到另一个android的一周变化的主要内容,如果未能解决你的问题,请参考以下文章
如何使用电话号码将通知从 android 应用程序发送到另一个 android 设备?