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

Posted

技术标签:

【中文标题】使用 android-databinding 方法格式化友好的日期【英文标题】:Format friendly Date using android-databinding approach 【发布时间】:2019-03-03 07:01:59 【问题描述】:

我想将我的日期 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_
        android:layout_
        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】:

您为什么不创建一个数据绑定适配器,让您的 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&lt;String&gt; serverDate 并从您的响应中设置值,在 xml 中设置 app:bindServerDate="@viewModel.serverDate"。不要忘记将viewModel 添加为variable 并从您的activity/fragment 设置它

【讨论】:

我会试试这个方法,谢谢!【参考方案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);

【讨论】:

为了更好地查看代码,我不发表评论,而是在下面发送答案。【参考方案3】:
 @BindingAdapter("formatDate")
fun TextView.setDate(order_date: String) 
    var outputDate: String? = null
    try 
        val curFormater = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss")
        val postFormater = SimpleDateFormat("MMM dd, yyyy")

        val dateObj = curFormater.parse(order_date)
        outputDate = postFormater.format(dateObj)
        this.setText(outputDate)

     catch (e: ParseException) 
        e.printStackTrace()
    

【讨论】:

以上是关于使用 android-databinding 方法格式化友好的日期的主要内容,如果未能解决你的问题,请参考以下文章

Android-DataBinding使用

基于MVVM架构,结合阿里ARouter打造的一套Android-Databinding组件化开发方案

Android - DataBinding - 如何以及何时生成绑定类?

秒表的使用方法和技巧(秒表的使用方法)

Docker的基本使用方法

Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错