Android DataBinding, где можно получить контекст?

У меня есть TextView для отображения времени. Я хочу использовать плагин Android DataBinding.

Для форматирования времени я использую метод DateUtils.formatDateTime(context, int, int) который принимает экземпляр Context. Можно ли получить контекст, включающий элемент? Или я должен использовать старый школьный путь?

Спасибо

Ответы

Ответ 1

Думаю, я должен ответить вместо того, чтобы вставить комментарий. У вас будет больше вариантов при выпуске 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}"/>

Ответ 2

Также вы можете сделать что-то подобное в своем представлении, используя текущий вид context в качестве параметра.

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

Ответ 3

Создается специальная переменная с именем context для использования в привязке выражения по мере необходимости. Значение контекста - это контекст из root Посмотреть getContext(). Переменная контекста будет переопределена явное объявление переменной с этим именем.

Другими словами, каждый раз, когда вам нужно передать контекст, просто используйте "контекст", как в @{Object.method(context)}.