禁用 CardView 上的按钮 android
Disable Button on CardView android
我无法在特定时间 CardView
上将 Button
设置为不可见
我想要达到的目标:
我有一个 CardView
和一个 Button
。
当用户下订单时,订单日期和时间存储在 MySQL 服务器数据库中。我从服务器得到这个时间并增加了 10 分钟的延迟。
现在这个时间算是在CardView
.Button
invisble/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()
,有效地告诉 Handler
在 1471471952000
毫秒后执行此 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()
我无法在特定时间 CardView
上将 Button
设置为不可见
我想要达到的目标:
我有一个 CardView
和一个 Button
。
当用户下订单时,订单日期和时间存储在 MySQL 服务器数据库中。我从服务器得到这个时间并增加了 10 分钟的延迟。
现在这个时间算是在CardView
.Button
invisble/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 theRunnable
will be executed.
让我们在 2016-08-18 00:02:32
上加上 10 分钟并将其转换为毫秒(从纪元算起)。这等于 1471471952000
。
您将此值作为延迟传递给 postDelayed()
,有效地告诉 Handler
在 1471471952000
毫秒后执行此 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()