Android DataBinding 从哪里获取上下文?

Posted

技术标签:

【中文标题】Android DataBinding 从哪里获取上下文?【英文标题】:Android DataBinding where to get context? 【发布时间】:2015-11-29 05:17:51 【问题描述】:

我有TextView 显示时间。我想用android的DataBinding插件。

对于格式化时间,我使用DateUtils.formatDateTime(context, int, int) 方法,该方法采用Context 实例。是否可以获得上下文包含元素?还是我必须使用老派的方式?

谢谢

【问题讨论】:

您可以将其作为变量传递给数据绑定。在 rc2 中,您将拥有与 DataBindingComponent 相关的其他选项。或者,您可以创建一个对多个属性进行操作的 BindingAdapter。 【参考方案1】:

要使用的字符串资源使用这个

this.yourView.getRoot().getResources().getString(R.string.your_string)

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

...
android:text="@yourModelHere.yourModelMethodHere(context)"
...

【讨论】:

你从哪里得到的? @dominik4142 您可以查看here。 A special variable named context is generated for use in binding expressions as needed. The value for context is the Context from the root View's getContext(). The context variable will be overridden by an explicit variable declaration with that name. 活动有什么特别的词吗 @MuhammadYounas 活动没有一个特殊的词,你为什么要在你的 xml 中使用你的活动?如果你真的需要它,你可以将上下文投射到我猜视图所在的活动中,但不确定这是否是一个好习惯。【参考方案4】:

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

@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"/>

【讨论】:

有更好的解决方案吗?我有一个类似的情况,我需要一个上下文(我需要一个格式化字符串的本地化值)并且想知道如何让框架提供它。我已经实现了这个解决方案,它有效,但失去了数据绑定提供的大部分清晰度。编辑:This commit 是我正在做的工作。 上下文现在可作为自动变量“上下文”使用。但是,对于您的特定需求,有更好的解决方案。字符串格式是表达式语言的一部分,所以使用类似@@string/myformat(var1, var2) 太好了,谢谢!今晚我将对此进行实验。有什么地方可以关注这些变化吗? The docs 不要提及这一点,我正在努力在任何地方找到更改日志。 @GeorgeMount 我还没明白你的答案,请帮我在我的问题中回答。谢谢:(***.com/questions/42881529/…

以上是关于Android DataBinding 从哪里获取上下文?的主要内容,如果未能解决你的问题,请参考以下文章

使用 DataBinding 时 layout_height 在布局文件中不起作用

如何将 dataBinding 与 spinner 一起使用并获取当前值?

Android的DataBinding原理

从 DataBinding 实例中查找类似视图

com.google.android.gms.samples.wallet.databinding 包不存在

DSL 元素 'android.dataBinding.enabled' 已过时,已替换为 'android.buildFeatures.dataBinding'