Android DataBinding在哪里获取上下文?

bak*_*kua 42 data-binding android view android-context

我有TextView显示时间.我想使用Android的DataBinding插件.对于格式化时间,我使用DateUtils.formatDateTime(context,int,int)方法,该方法接受Context实例.是否可以获取上下文包含元素?或者我必须使用旧学校的方式?

谢谢

epo*_*ool 65

您也可以使用当前视图context作为参数在视图中执行类似的操作.

...
android:text="@{yourModelHere.yourModelMethodHere(context)}"
...
Run Code Online (Sandbox Code Playgroud)

  • @ dominik4142你可以查看[这里](http://developer.android.com/intl/es/tools/data-binding/guide.html#variables).`根据需要,生成一个名为context的特殊变量,用于绑定表达式.上下文的值是来自根View的getContext()的Context.上下文变量将被具有该名称的显式变量声明覆盖 (14认同)
  • 你从哪里得到那个的? (3认同)

Geo*_*unt 36

以为我应该回答而不是发表评论.当rc2发布时,你会有更多的选择.在rc1中,您可以将变量中的上下文传递给Binding,然后将其作为参数传递给方法.或者,您可以为数据绑定创建自定义属性:

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

然后在TextView中使用它:

<TextView ... app:timeMillis="@{timeVar}" app:dateFlags="@{dateFlags}"/>
Run Code Online (Sandbox Code Playgroud)

  • 现在可以将上下文用作自动变量"上下文".但是,根据您的特定需求,有一个更好的解决方案.字符串格式是表达式语言的一部分,所以使用类似`@ {@ string/myformat(var1,var2)}的东西. (11认同)

小智 11

会根据需要生成一个特殊的名为context的变量,用于绑定表达式。context的值是根视图的getContext()中的Context。上下文变量将被具有该名称的显式变量声明覆盖。

换句话说,每次您需要传递上下文时,只需使用中的“ context”即可@{Object.method(context)}