尝试在我的android项目中每天重复执行一次textview中的文本更改

问题描述 投票:1回答:1

假设我想每天下午02:00自动更改我的textview文本,我如何实现此功能。

val df = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")
        val systemDat = Calendar.getInstance(Locale.JAPAN).after(df)
        if (systemDat) {
            binding.includeTokyoSession.text_one.text = "successful"
        } else {
            binding.includeTokyoSession.text_one.text = "failure"
        }
android kotlin time calendar date-format
1个回答
0
投票

我想您想在特定时间后更改TextView的文本,但是似乎您不知道比较时的日期,并且您的代码中有几个错误。

首先,这行代码:

DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")

将返回具有本地日期Date中的日期和时间的01-01-1970 02:00:00实例。但是,您需要获得一个Date实例,其中包含今天的日期和时间14:00:00

第二,这行代码:

Calendar.getInstance(Locale.JAPAN).after(df)

这是Calendar::after()函数的错误用法,这是因为您只能将Calendar对象传递给该函数以获得正确的比较结果,否则它将始终返回false。

在您的情况下,您正在传递Date对象。

下面是Calendar::after()函数的实现。

public boolean after(Object when) {
    return when instanceof Calendar
        && compareTo((Calendar)when) > 0;
}

如果您想将今天的当前时间与14:00进行正确的比较(仅比较今天的时间),这是对代码的修改:

val calendarToCompare = Calendar.getInstance(Locale.JAPAN).apply {
    set(Calendar.HOUR_OF_DAY, 14)
    set(Calendar.MINUTE, 0)
    set(Calendar.SECOND, 0)
    set(Calendar.MILLISECOND, 0)
}

val systemDat = Calendar.getInstance().after(calendarToCompare)

if (systemDat) {
    textview.text = "successful"
} else {
    textview.text = "failure"
}

如果要执行生命周期感知的视图更新(例如,设置文本视图的文本),则可以选中此gist

© www.soinside.com 2019 - 2024. All rights reserved.