使用android-databinding方法格式化友好日期

时间:2018-09-27 11:15:32

标签: android android-studio android-databinding

我想将日期YYYY / MM / DD格式化为更友好的模式。

我使用android-databinding。

我希望输出示例:2006年8月22日,星期二。 我当前从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 :(得分:3)

为什么不创建数据绑定适配器,以便您的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

进行设置

答案 1 :(得分:1)

您需要两个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);