Отключить кнопку на CardView Android

java android jodatime android-cardview

479 просмотра

2 ответа

У меня проблемы с установкой Buttonневидимого на CardViewопределенное время

Чего я пытаюсь добиться: у меня есть CardViewс Button. Когда пользователь размещает заказ, дата и время заказа сохраняются в БД сервера MySQL. Я получаю это время с сервера и добавляю к нему 10 минутную задержку.

Теперь это время считается Buttonневидимым / ушедшим CardView.

Что я использую: Для времени, я использую Joda Time & любой код ниже находится внутри onBindViewHolder()изRecyclerview

Что я пробовал до сих пор: я получаю время с сервера

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);

Теперь я установил время задержки при ButtonиспользованииpostDelayed()

 holder.btnCancel.postDelayed(new Runnable() {
                @Override
                public void run() {
                    holder.btnCancel.setVisibility(View.GONE);
                }
            }, delay.getMillis());

Теперь, когда я запускаю приложение, кнопка на CardViewдолжна была исчезнуть, как и OrderDate (18 августа - за два дня до текущего).

Я попытался использовать обычное время Java вместо JODA, но не повезло.

Я не могу понять, в чем проблема. Запрос вашего руководства.

Спасибо

Автор: Sriram Источник Размещён: 08.11.2019 11:02

Ответы (2)


0 плюса

Решение

Из документации по postDelayed():

delayMillis long: Задержка (в миллисекундах) до момента Runnableвыполнения.

Давайте добавим 10 минут 2016-08-18 00:02:32и преобразуем его в миллисекунды (с эпохи). Это соответствует чему-то вроде 1471471952000.

Вы передаете это значение postDelayed()как задержку, фактически приказывая Handlerвыполнить это Runnableчерез 1471471952000миллисекунды, что примерно равно 47 годам.

Это на самом деле не имеет смысла.

Чтобы скрыть свои данные, Buttonесли они Dateперед текущим Date, вы можете сделать что-то вроде этого:

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();
}
Автор: earthw0rmjim Размещён: 20.08.2016 08:06

1 плюс

@ 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()
Автор: anddev Размещён: 20.08.2016 08:15
Вопросы из категории :
32x32