Android数据绑定 - 无法调用点击处理程序

时间:2016-04-18 03:02:23

标签: android event-handling android-databinding

我使用数据绑定创建了一个简单的登录屏幕,如http://developer.android.com/tools/data-binding/guide.html所述但是我无法从

更改文本通知
  1. 文本框或
  2. 按钮单击。
  3. 感谢任何帮助

    我认为对于文本框通知,android团队可能没有完全实现它。但是,我无法理解按钮点击处理程序的错误。

    片段代码看起来像

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

    更新

    转向android studio 2.1 beta 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}"/>
    

2 个答案:

答案 0 :(得分:2)

您可以尝试以下按钮吗?

'!=', '%'... expected, got ':'

我在IDE上遇到错误({{1}}),但它在应用程序运行时有效......重要的部分是“::”。

希望这能帮到你!

答案 1 :(得分:1)

众所周知,onClick事件似乎无法在片段中工作,我不知道为什么。尝试使用BindingAdapter注释来定义自定义setter。