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)}
.