首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现从一台android到另一台android的星期转换

如何实现从一台android到另一台android的星期转换
EN

Stack Overflow用户
提问于 2021-11-03 19:06:11
回答 1查看 36关注 0票数 0

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

我不明白如何使类型(分子或分母)每周显示在我的片段上,那么,希望在周日00:00将周分别更改为分子或分母。我正在使用Kotlin

EN

回答 1

Stack Overflow用户

发布于 2021-11-03 19:42:41

我会在ViewModel中这样做。使用布尔值公开LiveData,其中true/false对应于分子周或分母周。选择任意的星期一日期作为计算当天的基准。我随意地使用这周的星期一作为这个基准时期。

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

代码语言:javascript
复制
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函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69830464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档