2015-05-31 8 views
11

sagen, dass ich eine Earthquake Klasse haben, die ein Feld hat public final double magnitude;, und ich habe ein ähnliches Layout wie diese:Wie formatiere ich ein Double mit Android View-Datenbindungen?

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <variable name="earthquake" type="com.example.Earthquake"/> 
    </data> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="48dp"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:text="@{String.format(earthquake.magnitude)}" /> 
     ... 
    </LinearLayout> 
</layout> 

Hinweis Ich habe "@{String.format(earthquake.magnitude)}" zu verwenden, um dieses Feld zu verwenden, sonst bekomme ich diesen Fehler:

Cannot find the setter for attribute 'android:text' on android.widget.TextView with parameter type double.

Leider führt dies dazu, dass das Doppel mit voller Genauigkeit gedruckt wird. Wie kann ich den angezeigten doppelten Wert formatieren?

+3

Ein weiterer Ansatz, neben Ihrer Antwort akzeptiert, ist die Bindung an berücksichtigen nicht die 'Earthquake', aber vielleicht etwas mehr entlang den Linien eines 'ErdbebenViewModel'. Ich bin * weit * von einem MVVM-Experten entfernt, aber meine Interpretation des "Ansichtsmodells" besteht darin, dass es eine Darstellung der Daten enthält, die von den Ansichten verwendet werden. 'EarthquakeViewModel' könnte' getMagnitude() 'haben, die die formatierte Zeichenkette zurückgibt, so dass die Formatierungslogik außerhalb der XML-Layout-Ressourcen bleibt. Ich sage nicht, dass das besser oder schlechter ist, aber es war meine ursprüngliche Reaktion auf Ihre Frage zu sehen, bevor ich zu der Antwort kam. – CommonsWare

Antwort

22

Ich habe noch nicht auf die verbindliche Ausdruck Sprache in der M SDK-Vorschau geschaut, so könnte ich voreilige Schlüsse ziehen, aber wenn dies durch die normale String.format() Methode aufruft, dann erfordert es ein Muster. Hast du das versucht?

android:text='@{String.format("%.1f", earthquake.magnitude)}' 
+1

Beat mich auf meine eigene Frage zu beantworten! Ich wusste nicht, dass ich einfache Anführungszeichen für die XML-Attributwerte verwenden könnte. Ich fand es unter [Expression Language # String Literals] (https://developer.android.com/tools/data-binding/guide.html#expression_language) in den Dokumenten beschrieben. –

+0

upvote für '' außerhalb der Bindung. –

0

String.valueOf() ist auch eine Option:

android:text="@{String.valueOf(earthquake.magnitude)}" 
Verwandte Themen