在 Android 应用中仅显示具有今天截止日期的待办事项

对于我的应用程序,我需要一个仅显示截止日期为今天的待办事项的功能。我是 Android Studio 和 Java 的新手,所以很遗憾我不知道如何编写这段代码。


到目前为止,这是我的代码:


public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getIdemid()) {

        case R.id.menu_dailyToDo:

            showDailyTodo();

            adapter.notifyDataSetChanged();

            return true;

       }

    }

}


public void showDailyTodo() {

    if(tvDueDate == //today) {

        // code that listview items with duedate today are shown.

    }

}

我希望有人可以帮助我找到解决此问题的方法,到目前为止我所能找到的一切都无法帮助我。


编辑:


在图片中你可以看到我的列表视图。

http://img.mukewang.com/626a483f0001e36802710153.jpg

日期是 ID 为 tvDueDate 的 TextView。



月关宝盒
浏览 129回答 3
3回答

一只萌萌小番薯

避免遗留的日期时间类您正在使用几年前被现代java.time类取代的可怕的旧日期时间类。LocalDate该类LocalDate表示没有时间、没有时区或从 UTC 偏移的仅日期值。你的ToDo类应该有一个 type 的成员变量LocalDate。以及可选的 getter 方法。public class ToDo {&nbsp; &nbsp; public LocalDate whenDue ;}时区时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因区域而异。例如,法国巴黎午夜过后几分钟是新的一天,而魁北克蒙特利尔仍然是“昨天” 。如果未指定时区,JVM 会隐式应用其当前默认时区。该默认值可能会在运行时(!)期间随时更改,因此您的结果可能会有所不同。最好将您想要/预期的时区明确指定为参数。以、或等格式指定适当的时区名称。永远不要使用 2-4 个字母的缩写,例如或因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。Continent/RegionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTISTZoneId z = ZoneId.of( "America/Montreal" ) ;&nbsp;&nbsp;LocalDate today = LocalDate.now( z ) ;如果你想使用 JVM 的当前默认时区,请求它并作为参数传递。如果省略,代码会变得模棱两可,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样没有意识到这个问题。ZoneId z = ZoneId.systemDefault() ;&nbsp; // Get JVM’s current default time zone.或指定日期。您可以通过数字设置月份,1 月至 12 月的编号为 1-12。LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;&nbsp; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.或者,更好的是,使用Month预定义的枚举对象,一年中的每个月一个。提示:Month在整个代码库中使用这些对象,而不是仅仅使用整数,以使您的代码更具自文档性、确保有效值并提供类型安全。Year&同上YearMonth。LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;比较LocalDate在: isEqual, isBefore, isAfter,上比较使用方法equals。循环您的待办事项,将日期与目标、今天的日期进行比较。ZoneId z = ZoneId.of( "Africa/Tunis" ) ;&nbsp; // Or `ZoneId.systemDefault()`.LocalDate ld = LocalDate.now( z ) ;List< ToDo > todayToDos = new ArrayList<>() ;for( ToDo todo : todos ) {&nbsp; &nbsp; if( todo.whenDue.isEqual( today ) ) {&nbsp; &nbsp; &nbsp; &nbsp; todayToDos.add( todo ) ;&nbsp; &nbsp; }}

开心每一天1111

您可以使用System.currentTimeMillis()long 数据类型来获取高达毫秒的当前时间。或者您可以使用Date d = new Date();将日期作为 Date 对象获取并将其转换为所需格式的字符串,例如Date d = new Date();SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");String formattedDate = df.format(d);这取决于您在 tvDueDate 中存储日期的数据类型和格式。然后您可以将 Todos 项设置为 ListView 适配器,如这篇文章 Custom Adapter for List View中所示编辑您可以使用字符串在字符串中获取您的截止日期String dueDate = tvDueDate.getText().toString();然后做public void showDailyTodo() {Date d = new Date();SimpleDateFormat df = new SimpleDateFormat("dd.mm.yyyy");String formattedDate = df.format(d);if(dueDate.equals(formattedDate)) {&nbsp; &nbsp; // code that listview items with duedate today are shown.}}

慕娘9325324

您可以使用 android 中的 DateUtils 库来检查到期日是否是今天。这是官方文档的链接:https://developer.android.com/reference/android/text/format/DateUtils#isToday(long)要获取 listview 项目,只需遍历项目并检查它们的截止日期是否是今天并过滤掉项目。您可以将这些项目传递给列表视图的适配器。对于单个项目的比较,粗略的实现是:long timeInMillis = dueDate.getTime();if (dateUtils.isToday(timeInMillis)){&nbsp; &nbsp; //this is today's item, so add this to a list which is sent to the listview}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java