Форматирование даты с использованием подхода привязки данных Android - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы отформатировать дату YYYY / MM / DD в более дружественном режиме.

Я использую привязку данных 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

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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Почему бы вам не создать адаптер привязки данных, чтобы ваш 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 set app:bindServerDate="@{viewModel.serverDate}".Не забудьте добавить viewModel как variable и установить его из вашего activity/fragment

0 голосов
/ 27 сентября 2018

Вам нужно два 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);
...