2015-09-03 24 views
15

Ho TextView per mostrare il tempo. Voglio utilizzare il plug-in DataBinding di Android. Per il tempo di formattazione sto usando il metodo DateUtils.formatDateTime (context, int, int) che prende l'istanza Context. È possibile ottenere l'elemento include context? O devo usare la vecchia scuola?Dati AndroidCome trovare il contesto?

Grazie

+0

È possibile passarlo come variabile al collegamento dati. In rc2, avrai altre opzioni relative a DataBindingComponent. In alternativa, puoi creare un BindingAdapter che funzioni su più attributi. –

risposta

20

Ho pensato di rispondere invece di inserire un commento. Avrai più opzioni quando rc2 verrà rilasciato. In rc1, puoi passare il contesto in una variabile al Binding, quindi passarlo come parametro al metodo. In alternativa, è possibile creare un attributo personalizzato per l'associazione dati:

@BindingAdapter({"timeMillis", "dateFlags"}) 
public static void setDateText(TextView view, int timeMillis, int dateFlags) { 
    view.setText(DateUtils.formatDateTime(view.getContext(), timeMillis, 
       dateFlags)); 
} 

E poi utilizzare nel vostro TextView:

<TextView ... app:timeMillis="@{timeVar}" app:dateFlags="@{dateFlags}"/> 
+0

C'è una soluzione superiore a questo? Ho una situazione simile in cui ho bisogno di un contesto (ho bisogno di un valore localizzato per una stringa di formattazione) e vorrei sapere come posso fornire il framework. Ho implementato questa soluzione, che funziona, ma perde gran parte della chiarezza fornita dal database. Modifica: [Questo commit] (https://github.com/adamsp/wsnz-android/commit/fe74f65979dbd97fc5f7ca2496732753f4a2a16c) è ciò su cui sto lavorando. –

+8

Il contesto è ora disponibile come variabile automatica "contesto". Tuttavia, per le tue esigenze specifiche, esiste una soluzione migliore. La formattazione delle stringhe fa parte del linguaggio delle espressioni, quindi usa qualcosa come '@ {@ string/myformat (var1, var2)}' –

+0

Grande, grazie! Ci proverò stasera. C'è un posto dove posso seguire questi cambiamenti? [I documenti] (http://developer.android.com/tools/data-binding/guide.html) non menzionano questo e sto faticando a trovare un registro delle modifiche ovunque. –

30

Inoltre si può fare qualcosa di simile a suo avviso utilizzando la vista corrente context come parametro.

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

da dove l'hai preso? – dominik4142

+4

@ dominik4142 Puoi verificarlo [qui] (http://developer.android.com/intl/es/tools/data-binding/guide.html#variables). 'Una variabile speciale denominata context viene generata per l'uso nel binding espressioni come necessario Il valore per il contesto è il contesto dalla radice View getContext(). La variabile di contesto sarà sostituita da una dichiarazione di variabile esplicita con quel nome. – epool

+0

c'è qualche parola speciale per l'attività –

0

una variabile speciale denominata contesto viene generato per l'uso in associazione espressioni come necessario. Il valore per il contesto è il Contesto dal getContext della vista radice (). La variabile di contesto verrà sovrascritta da una dichiarazione di variabile esplicita con quel nome.

In altre parole, ogni volta che è necessario passare il contesto, utilizzare "contesto" come in @{Object.method(context)}.

Problemi correlati