2015-09-03 62 views
15

我有用于显示时间的TextView。我想使用Android的DataBinding插件。 对于格式化时间,我使用了带有Context实例的DateUtils.formatDateTime(context,int,int)方法。是否有可能获得上下文包含元素?或者我必须使用老派的方式?Android DataBinding从哪里获取上下文?

谢谢

+0

您可以将它作为变量传递给数据绑定。在rc2中,您将拥有与DataBindingComponent相关的其他选项。或者,您可以创建一个可以在多个属性上运行的BindingAdapter。 –

回答

20

想到我应该回答,而不是放入评论。当rc2发布时你会有更多的选择。在rc1中,可以将变量中的上下文传递给绑定,然后将其作为参数传递给方法。另外,您也可以为数据创建一个自定义属性绑定:

@BindingAdapter({"timeMillis", "dateFlags"}) 
public static void setDateText(TextView view, int timeMillis, int dateFlags) { 
    view.setText(DateUtils.formatDateTime(view.getContext(), timeMillis, 
       dateFlags)); 
} 

,然后用它在你的TextView:

<TextView ... app:timeMillis="@{timeVar}" app:dateFlags="@{dateFlags}"/> 
+0

有没有比这更好的解决方案?我有一个类似的情况,我需要一个上下文(我需要一个格式化字符串的本地化值),并希望知道如何让框架提供它。我已经实现了这个解决方案,但是失去了数据绑定提供的大部分清晰度。编辑:[这个提交](https://github.com/adamsp/wsnz-android/commit/fe74f65979dbd97fc5f7ca2496732753f4a2a16c)是我正在工作。 –

+8

上下文现在可用作自动变量“上下文”。但是,针对您的具体需求,还有更好的解决方案。字符串格式化是表达式语言的一部分,所以使用类似'@ {@ string/myformat(var1,var2)}' –

+0

太好了,谢谢!我会在今天晚上尝试一下。有什么地方我可以按照这些变化? [文档](http://developer.android.com/tools/data-binding/guide.html)没有提到这一点,我正努力在任何地方找到更改日志。 –

30

您也可以使用当前视图context为做这样的事情在你看来参数。用于产生在根据需要结合 表达式

... 
android:text="@{yourModelHere.yourModelMethodHere(context)}" 
... 
+0

你从哪里得到的? – dominik4142

+4

@ dominik4142你可以看看[这里](http://developer.android.com/intl/es/tools/data-binding/guide.html#variables)。'生成一个名为context的特殊变量,用于绑定上下文的值是来自根View的getContext()的Context。上下文变量将被具有该名称的显式变量声明覆盖。“ – epool

+0

是否有任何活动的特殊字词 –

0

命名上下文中的特殊变量。上下文的值是来自 根视图的getContext()的上下文。上下文变量将被 覆盖一个带有该名称的显式变量声明。

换句话说,每当你需要通过上下文时,只需使用“context”,如。