2016-04-18 11 views
6

http://developer.android.com/tools/data-binding/guide.html में वर्णित के रूप में मैं डेटा बाइंडिंग का उपयोग कर एक सरल लॉगिन स्क्रीन बनाया है लेकिन मैं पाठ की अधिसूचनाएंड्रॉयड डेटा बाइंडिंग - आह्वान करने में असमर्थ क्लिक हैंडलर

  1. पाठ बॉक्स से बदल पाने में असमर्थ हूँ या
  2. बटन क्लिक करें।

किसी भी मदद

मैं पाठ बॉक्स अधिसूचना के लिए लगता है की सराहना की है, एंड्रॉयड टीम यह पूरी तरह से लागू कर दिया है नहीं हो सकता है। हालांकि, मैं बटन क्लिक हैंडलर के लिए मेरी गलती को समझने में असफल रहा।

टुकड़ा कोड

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    FragmentAccountSetupInitialBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_account_setup_initial, container, false); 
    View view = binding.getRoot(); 

    binding.setAccount(new UserAccount()); 
    return view; 
} 

तरह उपयोगकर्ता खाते के लिए ViewModel के रूप में

public class UserAccount extends BaseObservable { 
    private String _email; 
    private String _password; 

    @Bindable 
    public String getEmail() { 
     return _email; 
    } 

    public void setEmail(String email) { 
     if(!TextUtils.equals(_email, email)) { 
      _email= email; 
      notifyPropertyChanged(BR.email); 
     } 
    } 


    @Bindable 
    public String getPassword() { 
     return _password; 
    } 

    public void setPassword(String password) { 
     if(!TextUtils.equals(_password, password)) { 
      _password = password; 
      notifyPropertyChanged(BR.password); 
     } 
    } 

    public void onSignInButtonClick(View view) { 
     // Sign in now 
    } 
} 

नीचे परिभाषित किया गया है और टुकड़ा लेआउट

<layout 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <variable name="account" type="project.namespace.UserAccount"/> 
    </data> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingTop="56dp" 
      android:paddingLeft="24dp" 
      android:paddingRight="24dp"> 

      <!-- Email Label --> 
      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="8dp" 
       android:layout_marginBottom="8dp"> 
       <android.support.design.widget.TextInputEditText 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:inputType="textEmailAddress" 
        android:hint="@string/email" 
        android:text="@{account.email}"/> 
      </android.support.design.widget.TextInputLayout> 

      <!-- Password Label --> 
      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="8dp" 
       android:layout_marginBottom="8dp"> 
       <android.support.design.widget.TextInputEditText 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:inputType="textPassword" 
        android:hint="@string/password" 
        android:text="@{account.password}"/> 
      </android.support.design.widget.TextInputLayout> 


      <android.support.v7.widget.AppCompatButton 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="24dp" 
       android:layout_marginBottom="24dp" 
       android:padding="12dp" 
       android:text="@string/signin" 
       android:onClick="@{account.onSignInButtonClick}"/> 

     </LinearLayout> 

    </FrameLayout> 
</layout> 

है अद्यतन लग रहा है

एंड्रॉइड स्टूडियो 2.1 बीटा 2 पर जाने से पहली समस्या हल हो जाती है। के रूप में

<android.support.design.widget.TextInputEditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textEmailAddress" 
    android:hint="@string/email" 
    android:text="@={account.email}"/> 
+0

इस लिंक [ऑनक्लिक हैंडलर] (http://stackoverflow.com/questions/31961901/using-databinding-library-for-binding-events) के माध्यम से जाएं, आप इस प्रश्न के समाधान ढूंढ सकते हैं। –

+0

मुझे लगता है कि मैं वही कर रहा हूं जो मैं कर रहा हूं। एक अलग MyHandler कक्षा के बजाय मैं इसे UserAccount क्लास में प्रबंधित कर रहा हूं। – resp78

+1

डेटा बाइंडिंग केवल वर्तमान में 'एक तरफ' है। तो आपके मॉडल में केवल परिवर्तन ही दृश्य को सूचित करते हैं - दूसरे तरीके से नहीं। यह एक एंड्रॉइड स्टूडियो 2.1' ([स्रोत] (https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/?utm_source=androiddevdigest) के साथ आने वाली एक विशेषता है। आपका कोड ठीक दिखता है, क्या आप अपनी समस्या को और अधिक समझा सकते हैं? क्या आपकी 'ऑनक्लिक' विधि को कॉल किया जाता है? – yennsarah

उत्तर

1

इस प्रकार मैं भी जाना जाता है के रूप में लेआउट अपडेट किया गया, onClick ईवेंट टुकड़ा में काम नहीं लगता है और मैं BindingAdapter एनोटेशन का उपयोग why.Try नहीं कस्टम सेटर परिभाषित करने के लिए करते हैं।

+0

याप के साथ कोई भाग्य नहीं है। – beerBear

2

क्या आप अपने बटन के लिए निम्न कोशिश कर सकते हैं?

<android.support.v7.widget.AppCompatButton 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="24dp" 
      android:layout_marginBottom="24dp" 
      android:padding="12dp" 
      android:text="@string/signin" 
      android:onClick="@{account::onSignInButtonClick}"/> 

मैं आईडीई ('!=', '%'... expected, got ':') पर एक त्रुटि प्राप्त लेकिन यह काम करता है जब एप्लिकेशन चल रहा है ... महत्वपूर्ण हिस्सा "::" है।

उम्मीद है कि यह आपकी मदद करता है!

संबंधित मुद्दे