एंड्रॉइड यूआई टूलकिट टीम के यिजिट बॉयर और जॉर्ज माउंट सदस्यों ने talk on databinding दिया। 13:41 पर जॉर्ज माउंट का कहना है किडाटाबेसिंग: एकाधिक विधियों के साथ श्रोता से एकल विधि
आप कुछ अजीब श्रोताओं को भी कर सकते हैं, जैसेTextChanged। टेक्स्टवॉचर के पास तीन विधियां हैं, लेकिन सभी को केवल पर टेक्स्ट चेंज किया गया है, है ना? यदि आप चाहते हैं, या उन सभी में आप वास्तव में उनमें से केवल एक तक पहुंच सकते हैं। "
<Button android:onTextChanged="@{handlers.textChanged}" …/>
वह लग रहा था कह जा सकता है कि बजाय हमेशा की तरह addTextChangedListener विधि है कि इस
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//Do something
}
@Override
public void afterTextChanged(Editable editable) {}
});
तरह दिखता है का उपयोग कर के हम बस यह
<EditText
android:onTextChanged="@{handlers::onTextChanged}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
हैंडलर वर्ग कर सकता है
public class Handlers{
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Do something
}
}
कोड इस उदाहरण में काम करता है, लेकिन यह अन्य मामलों में काम नहीं करता है जहां श्रोता के पास ViewPager की addOnPageChangeListener विधि जैसी कई विधियां हैं। उदाहरण के लिए इस
<android.support.v4.view.ViewPager
android:OnPageSelected="@{handlers::onPageSelected}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
और हैंडलर वर्ग काम नहीं करता है
public class Handlers{
public void onPageSelected(int position) {
//Do something
}
}
परियोजना जब
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Could not resolve handlers::onPageSelected as a listener.
****\ data binding error ****
निर्माण करने के लिए मैं अब क्योंकि थोड़ा संदेह में हूँ कोशिश कर इस त्रुटि बाहर थूक यह पता चला है कि एडिटटेक्स्ट में वास्तव में विरासत में onTextChanged विधि है जो डाटाबेसिंग लाइब्रेरी android:onTextChanged="@{handlers::onTextChanged}"
को भी बांध सकती है।
तो मेरा सवाल यह है कि वास्तव में एक श्रोता विधि से जुड़ना संभव है और मुझे कुछ याद आ रहा है, या जॉर्ज माउंट ने अपनी बातचीत में गलती की है?
बहुत बढ़िया! सीधे घोड़े के मुंह से जवाब :) – Olumide