2016-06-16 5 views
18

स्ट्रिंग के लिए @ बाइंडिंग कनवर्जन बनाने की कोशिश करते समय एक रहस्यमय समस्या में भाग लें।
निम्नलिखित कोड तार को तैरता के लिए काम करता है:एंड्रॉइड डेटा बाध्यकारी @ बाइंडिंग कॉन्फ़्रेंस विफलता int को स्ट्रिंग करने के लिए

xml:

... 
<variable 
     name="myViewModel" 
     type="... .SomeModel" /> 
... 
<TextView 
      style="@style/StyleStuff" 
      android:text="@{myViewModel.number}" /> 

कोड:

public class SomeModel { 
    public ObservableFloat number = new ObservableFloat(); 
} 

और सेटिंग:

viewModel.number.set(3.14f); 

लेकिन अगर मैं इंच के लिए पर एक ही चीज़ का प्रयास करता हूं तो मुझे एक क्रैश मिलता है।

public ObservableInt number = new ObservableInt(); 

viewModel.number.set(42); 

साथ

मैं निम्नलिखित हो:

FATAL EXCEPTION: main 
Process: ...myapplication, PID: 14311 
android.content.res.Resources$NotFoundException: String resource ID #0xfa0 
    at android.content.res.Resources.getText(Resources.java:1123) 
    at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52) 
    at android.widget.TextView.setText(TextView.java:4816) 
    at ...executeBindings(ActivityAdaptersBinding.java:336) 
    at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355) 

कोई भी विचार? धन्यवाद!

उत्तर

46

android:textint के साथ मानता है कि int एक स्ट्रिंग संसाधन आईडी है। android:text="@{Integer.toString(myViewModel.number)}" का उपयोग करें।

+0

अहा की तरह! धन्यवाद! मैंने सोचा होगा कि डेटा बाइंडिंग टेक्स्ट दृश्य को हिट करने से पहले int को जांच और कनवर्ट करेगा, लेकिन स्पष्ट रूप से ~ इसका मतलब यह है कि जब भी मूल प्रकार का गलत व्याख्या किया जा सकता है और बिना मारने के उपयोग किया जाता है तो हमें बाध्यकारी कनवर्सन का उपयोग करते समय सावधान रहना चाहिए कनवर्टर। – Dave

+0

@ डेव: "मैंने सोचा होगा कि डेटा बाध्यकारी टेक्स्ट दृश्य को हिट करने से पहले int को जांच और कनवर्ट करेगा" - नहीं, क्योंकि सभी डेटा बाध्यकारी के लिए, आप * इसे एक स्ट्रिंग संसाधन आईडी दे रहे हैं। "इसका मतलब है कि हमें सावधान रहना चाहिए" - हाँ। :-) – CommonsWare

+4

यदि आप 2-तरफा बाध्यकारी बनाना चाहते हैं तो आप यह कैसे करेंगे? – InfernalRapture

0

परिवर्तित पूर्णांक स्ट्रिंग के लिए TextView में सेट के लिए bellow

android:text="@{String.valueOf(myViewModel.number)}" 
संबंधित मुद्दे