禁用 CardView 上的按钮 android

Disable Button on CardView android

我无法在特定时间 CardView 上将 Button 设置为不可见

我想要达到的目标: 我有一个 CardView 和一个 Button。 当用户下订单时,订单日期和时间存储在 MySQL 服务器数据库中。我从服务器得到这个时间并增加了 10 分钟的延迟。

现在这个时间算是在CardView.Buttoninvisble/gone.

我在用什么: 对于时间,我正在使用 Joda Time & 下面的任何代码都在 Recyclerview

onBindViewHolder()

目前我尝试过的: 我从服务器

获取时间
String orderDate = cOrder.getOrderDate(); // 2016-08-18 00:02:32

然后将时间转换为Date格式

DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
        DateTime dt = dateTimeFormatter.parseDateTime(orderDate);

我使用下面的方法将时间增加 10 分钟,以设置延迟

 DateTime delay = dt.plusMinutes(10);

现在我使用 postDelayed()

Button 上设置延迟时间
 holder.btnCancel.postDelayed(new Runnable() {
                @Override
                public void run() {
                    holder.btnCancel.setVisibility(View.GONE);
                }
            }, delay.getMillis());

现在,当我 运行 应用程序时,CardView 上的按钮应该已经消失,因为 orderDate 是(8 月 18 日 - 当前前两天)。

我也尝试使用常规 Java 时间而不是 JODA,但没有成功。

我无法弄清楚问题出在哪里。请求您的指导。

谢谢

来自postDelayed()documentation

delayMillis long: The delay (in milliseconds) until the Runnable will be executed.

让我们在 2016-08-18 00:02:32 上加上 10 分钟并将其转换为毫秒(从纪元算起)。这等于 1471471952000

您将此值作为延迟传递给 postDelayed(),有效地告诉 Handler1471471952000 毫秒后执行此 Runnable,这大致等于47岁。

这真的没有意义。

如果给定的 Date 在当前的 Date 之前,要隐藏你的 Button,你可以这样做:

String orderDateString = cOrder.getOrderDate();
try {
    Date now = new Date();
    Date orderDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
            Locale.getDefault()).parse(orderDateString);

    if(orderDate.before(now)) {
        holder.btnCancel.setVisibility(View.GONE);
    }
} catch (ParseException pe) {
    pe.printStackTrace();
}

@user13 的回答很好地解释了 postDelayed() 是如何工作的,所以你应该试试这个代码:

holder.btnCancel.postDelayed(new Runnable() {
            @Override
            public void run() {
                holder.btnCancel.setVisibility(View.GONE);
            }
        }, (10 * 60 * 1000)); // 10 min * 50 sec * 1000 ms
                              // or delay.getMillis() - dt.getMillis()