2015-05-31 10 views
11

Nói rằng tôi có một lớp Earthquake trong đó có một lĩnh vực public final double magnitude;, và tôi có một bố cục tương tự như này:Tôi làm cách nào để định dạng số tăng gấp đôi bằng cách sử dụng các ràng buộc dữ liệu chế độ xem Android?

<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> 

Lưu ý tôi phải sử dụng "@{String.format(earthquake.magnitude)}" sử dụng lĩnh vực này, khác tôi nhận được lỗi này:

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

Thật không may, điều này dẫn đến bản in hai mặt được in ở độ chính xác đầy đủ. Làm thế nào tôi có thể định dạng giá trị kép được hiển thị?

+3

cách tiếp cận khác, bên cạnh việc trả lời chấp nhận của bạn, là để xem xét ràng buộc không phải là 'Earthquake', nhưng có lẽ một cái gì đó nhiều hơn dọc theo dòng của một 'EarthquakeViewModel'. Tôi * xa * từ một chuyên gia MVVM, nhưng cách diễn giải của tôi về "mô hình xem" là nó có đại diện cho dữ liệu sẽ được sử dụng bởi các khung nhìn. 'EarthquakeViewModel' có thể có' getMagnitude() 'trả về chuỗi được định dạng, do đó định dạng logic được lưu giữ trong các tài nguyên XML bố trí. Tôi không nói điều này tốt hơn hay tệ hơn, nhưng đó là phản ứng ban đầu của tôi khi nhìn thấy câu hỏi của bạn, trước khi nhận được câu trả lời. – CommonsWare

Trả lời

22

Tôi chưa xem ngôn ngữ biểu thức ràng buộc trong bản xem trước M SDK, vì vậy tôi có thể chuyển đến kết luận, nhưng nếu điều này gọi đến phương thức bình thường String.format() thì yêu cầu phải có mẫu. Bạn đã thử cái này chưa?

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

Đánh tôi để trả lời câu hỏi của riêng tôi! Tôi đã không nhận ra tôi có thể sử dụng dấu nháy đơn cho các giá trị thuộc tính XML. Tôi tìm thấy nó được mô tả trong [Ngôn ngữ biểu thứC# Chuỗi văn học] (https://developer.android.com/tools/data-binding/guide.html#expression_language) trong tài liệu. –

+0

upvote cho '' bên ngoài ràng buộc. –

0

String.valueOf() cũng là một lựa chọn:

android:text="@{String.valueOf(earthquake.magnitude)}" 
Các vấn đề liên quan