2015-09-03 1 views
15

У меня есть TextView для отображения времени. Я хочу использовать плагин DataBinding от Android. Для времени форматирования я использую метод DateUtils.formatDateTime (контекст, int, int), который принимает экземпляр Context. Можно ли включить элемент include? Или мне нужно использовать старый школьный путь?Android DataBinding, где можно получить контекст?

Thanks

+0

Вы можете передать его как переменную для привязки данных. В rc2 у вас будут другие параметры, связанные с DataBindingComponent. Кроме того, вы можете создать BindingAdapter, который работает с несколькими атрибутами. –

ответ

20

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

Есть ли превосходное решение? У меня похожая ситуация, когда мне нужен контекст (мне нужно локализованное значение для строки форматирования), и мне хотелось бы знать, как я могу обеспечить его инфраструктуру. Я реализовал это решение, которое работает, но теряет большую часть ясности, которую дает привязка данных. Изменить: [Это коммит] (https://github.com/adamsp/wsnz-android/commit/fe74f65979dbd97fc5f7ca2496732753f4a2a16c) - это то, над чем я работаю. –

+8

Контекст теперь доступен как автоматическая переменная «context». Однако для ваших конкретных потребностей есть лучшее решение. Форматирование строк является частью языка выражения, поэтому используйте что-то вроде '@ {@ string/myformat (var1, var2)}' –

+0

Отлично, спасибо! Я буду экспериментировать с этим вечером. Есть ли где-нибудь я могу следить за этими изменениями? [Документы] (http://developer.android.com/tools/data-binding/guide.html) не упоминают об этом, и я изо всех сил стараюсь найти журнал изменений. –

30

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

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

Откуда вы это взяли? – dominik4142

+4

@ dominik4142 Вы можете проверить это [здесь] (http://developer.android.com/intl/es/tools/data-binding/guide.html#variables). 'Специальная переменная с именем context создается для использования в привязке выражения для контекста - это контекст из getContext() в корневом представлении. Контекстная переменная будет переопределена явным объявлением переменной с этим именем. « – epool

+0

есть ли какое-либо специальное слово для активности –

0

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

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