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



我使用数据绑定创建了一个简单的登录屏幕,如中所述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}"/>

您能为您的按钮尝试以下操作吗?

<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}"/>

我在IDE('!=', '%'... expected, got ':')上遇到一个错误,但当应用程序运行时它可以工作。。。重要的部分是"::"。

希望这对你有帮助!

正如我所知,onClick事件似乎在片段中不起作用,我不知道为什么。请尝试使用BindingAdapter注释来定义自定义setter。

相关内容

  • 没有找到相关文章

最新更新