我有用于显示时间的TextView。我想使用Android的DataBinding插件。 对于格式化时间,我使用了带有Context实例的DateUtils.formatDateTime(context,int,int)方法。是否有可能获得上下文包含元素?或者我必须使用老派的方式?Android DataBinding从哪里获取上下文?
谢谢
我有用于显示时间的TextView。我想使用Android的DataBinding插件。 对于格式化时间,我使用了带有Context实例的DateUtils.formatDateTime(context,int,int)方法。是否有可能获得上下文包含元素?或者我必须使用老派的方式?Android DataBinding从哪里获取上下文?
谢谢
想到我应该回答,而不是放入评论。当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}"/>
有没有比这更好的解决方案?我有一个类似的情况,我需要一个上下文(我需要一个格式化字符串的本地化值),并希望知道如何让框架提供它。我已经实现了这个解决方案,但是失去了数据绑定提供的大部分清晰度。编辑:[这个提交](https://github.com/adamsp/wsnz-android/commit/fe74f65979dbd97fc5f7ca2496732753f4a2a16c)是我正在工作。 –
上下文现在可用作自动变量“上下文”。但是,针对您的具体需求,还有更好的解决方案。字符串格式化是表达式语言的一部分,所以使用类似'@ {@ string/myformat(var1,var2)}' –
太好了,谢谢!我会在今天晚上尝试一下。有什么地方我可以按照这些变化? [文档](http://developer.android.com/tools/data-binding/guide.html)没有提到这一点,我正努力在任何地方找到更改日志。 –
您也可以使用当前视图context
为做这样的事情在你看来参数。用于产生在根据需要结合 表达式
...
android:text="@{yourModelHere.yourModelMethodHere(context)}"
...
你从哪里得到的? – dominik4142
@ dominik4142你可以看看[这里](http://developer.android.com/intl/es/tools/data-binding/guide.html#variables)。'生成一个名为context的特殊变量,用于绑定上下文的值是来自根View的getContext()的Context。上下文变量将被具有该名称的显式变量声明覆盖。“ – epool
是否有任何活动的特殊字词 –
命名上下文中的特殊变量。上下文的值是来自 根视图的getContext()的上下文。上下文变量将被 覆盖一个带有该名称的显式变量声明。
换句话说,每当你需要通过上下文时,只需使用“context”,如。
您可以将它作为变量传递给数据绑定。在rc2中,您将拥有与DataBindingComponent相关的其他选项。或者,您可以创建一个可以在多个属性上运行的BindingAdapter。 –