http://developer.android.com/tools/data-binding/guide.html में वर्णित के रूप में मैं डेटा बाइंडिंग का उपयोग कर एक सरल लॉगिन स्क्रीन बनाया है लेकिन मैं पाठ की अधिसूचनाएंड्रॉयड डेटा बाइंडिंग - आह्वान करने में असमर्थ क्लिक हैंडलर
- पाठ बॉक्स से बदल पाने में असमर्थ हूँ या
- बटन क्लिक करें।
किसी भी मदद
मैं पाठ बॉक्स अधिसूचना के लिए लगता है की सराहना की है, एंड्रॉयड टीम यह पूरी तरह से लागू कर दिया है नहीं हो सकता है। हालांकि, मैं बटन क्लिक हैंडलर के लिए मेरी गलती को समझने में असफल रहा।
टुकड़ा कोड
@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}"/>
इस लिंक [ऑनक्लिक हैंडलर] (http://stackoverflow.com/questions/31961901/using-databinding-library-for-binding-events) के माध्यम से जाएं, आप इस प्रश्न के समाधान ढूंढ सकते हैं। –
मुझे लगता है कि मैं वही कर रहा हूं जो मैं कर रहा हूं। एक अलग MyHandler कक्षा के बजाय मैं इसे UserAccount क्लास में प्रबंधित कर रहा हूं। – resp78
डेटा बाइंडिंग केवल वर्तमान में 'एक तरफ' है। तो आपके मॉडल में केवल परिवर्तन ही दृश्य को सूचित करते हैं - दूसरे तरीके से नहीं। यह एक एंड्रॉइड स्टूडियो 2.1' ([स्रोत] (https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/?utm_source=androiddevdigest) के साथ आने वाली एक विशेषता है। आपका कोड ठीक दिखता है, क्या आप अपनी समस्या को और अधिक समझा सकते हैं? क्या आपकी 'ऑनक्लिक' विधि को कॉल किया जाता है? – yennsarah