web-dev-qa-db-ja.com

Android DataBindingどこでコンテキストを取得しますか?

時間を表示するためのTextViewがあります。 AndroidのDataBindingプラグインを使用したい。

時間をフォーマットするために、Contextインスタンスを取るDateUtils.formatDateTime(context, int, int)メソッドを使用しています。コンテキストインクルード要素を取得することは可能ですか?それとも古い学校の方法を使用する必要がありますか?

ありがとう

40
bakua

コメントを書く代わりに答えるべきだと思った。 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}"/>
34
George Mount

また、現在のビューcontextをパラメーターとして使用して、ビューでこのようなことを行うことができます。

...
Android:text="@{yourModelHere.yourModelMethodHere(context)}"
...
61
epool

Contextという名前の特別な変数は、必要に応じて式をバインドするために生成されます。コンテキストの値は、ルートビューのgetContext()のコンテキストです。コンテキスト変数は、その名前の明示的な変数宣言によってオーバーライドされます。

つまり、コンテキストを渡す必要があるたびに、@{Object.method(context)}のように「コンテキスト」を使用するだけです。

8
Yoel Polanco