Форматирование удобной даты с использованием подхода привязки данных Android

Я хотел бы отформатировать дату ГГГГ / ММ / ДД в более удобный режим.

Я использую андроид-привязку данных.

Я ожидаю, что результат будет таким: вторник, 22 августа 2006 г. Мой текущий ввод от Json: «2018-09-27» (строковые данные в модели)

мой код:

public class DateUtils {

SimpleDateFormat fromServer = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat myFormat = new SimpleDateFormat("dddd, dd MMMM yyyy");

   public String getDateToFromat  (String reciveDate)  {
       String newFormatString = myFormat.format(fromServer.parse(reciveDate));
 return newFormatString;
   };

}

мой макет:

<layout xmlns:tools = "http://schemas.android.com/tools"
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto">

    <data class  = "CurrencyBindingDetailItem">
        <import type = "com.example.htw.currencyconverter.utils.DateUtils"/>
        <import type = "android.view.View" />
        <variable name = "currencyItemDetailDate" type = "com.example.htw.currencyconverter.model.CurrencyDate"/>
        <variable name = "currencyBindingItemDetail" type = "com.example.htw.currencyconverter.model.CurrencyBinding"/>
        <variable name = "callback" type = "com.example.htw.currencyconverter.callback.ClickCallback"/>
    </data>
    <TextView
        android:textSize = "28dp"
        android:text = "@{DateUtils.getDateToFromat(currencyItemDetailDate.date)}"
        android:textColor = "@color/primary_text"
        android:id = "@+id/date_text"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center" />

и у меня есть ошибка:

Found data binding errors.
****/ data binding error ****msg:**cannot find method getDateToFromat**(java.lang.String) in class com.example.htw.currencyconverter.utils.DateUtils

Я очистил, перезапустил и перестроил.

1
0
4 492
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам понадобятся два объекта DateFormat. Один для форматирования строки, полученной с сервера, а другой - в желаемый формат.

SimpleDateFormat fromServer = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat myFormat = new SimpleDateFormat("dddd, dd MMMM yyyy");
String inputDateStr = "2018-09-27";
Date date = fromServer.parse(inputDateStr);
String outputDateStr =myFormat.format(date);

для лучшего просмотра кода я не оставляю комментарий, а отправляю ответ ниже.

htw 27.09.2018 13:57
Ответ принят как подходящий

Почему бы вам не создать адаптер привязки данных, чтобы ваш xml оставался более понятным? Поскольку ваша дата с сервера находится в строковом формате, адаптер будет выглядеть так:

@BindingAdapter("bindServerDate")
public static void bindServerDate(@NonNull TextView textView, String date) {
    /*Parse string data and set it in another format for your textView*/
}

Использование этого:

В вашей viewModel создайте ObservableField<String> serverDate и установите значение из вашего ответа, в xml установите app:bindServerDate = "@{viewModel.serverDate}". Не забудьте добавить viewModel как variable и установить его со своего activity/fragment.

Я попробую так, THX!

htw 28.09.2018 14:37

Другие вопросы по теме