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

问题描述 投票:6回答:2

我已按照http://developer.android.com/tools/data-binding/guide.html所述使用数据绑定创建了一个简单的登录屏幕,但是我无法从[]获得文本更改的通知

  1. 文本框或
  2. 单击按钮。

我认为对于文本框通知,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}"/>
android event-handling android-databinding
2个回答
2
投票

您可以尝试使用以下按钮吗?


1
投票

据我所知,onClick事件在片段中似乎不起作用,我不为什么。请尝试使用BindingAdapter批注定义自定义设置器。

© www.soinside.com 2019 - 2024. All rights reserved.