Android-kotlin绑定不会更新属性

时间:2017-10-05 20:20:05

标签: android binding kotlin

我的问题是binding是可行的,但不正确!当我在textfield中输入新文字,然后尝试使用帮助textfield从此binding获取数据时,我会看到旧数据。我试图找到错误,但我无法做到。

我的activity_fblogin.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
    </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/grey_main"
        android:descendantFocusability="beforeDescendants"
        android:fitsSystemWindows="true"
        android:focusableInTouchMode="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:context="com.example.darkt.makeyouself.activities.FBLogin"
        tools:ignore="MissingConstraints">

        <EditText
            android:id="@+id/userName"
            android:layout_width="220dp"
            android:layout_height="43dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="test01"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Login"/>


        <EditText
            android:id="@+id/userPass"
            android:layout_width="220dp"
            android:layout_height="45dp"
            android:layout_marginTop="25dp"
            android:ems="10"
            android:inputType="textPassword"
            android:text="123456"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/userName"
            tools:layout_editor_absoluteX="74dp"
            tools:layout_editor_absoluteY="245dp"
            tools:text="Password"/>


        <Button
            android:id="@+id/loginButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:text="Login"
            android:textColor="@color/green_main"
            app:layout_constraintEnd_toEndOf="@+id/userPass"
            app:layout_constraintTop_toBottomOf="@+id/userPass" />

    </android.support.constraint.ConstraintLayout>

</layout>

这是kotlin的{​​{1}}课程。我试图解决这个问题,但是......请给我一个想法!

fblogin_activity

Example mistake

1 个答案:

答案 0 :(得分:0)

您的布局xml中没有任何内容实际使用数据绑定。

首先在您的标记中,您需要定义一个对象来引用数据绑定。例如:

<data>
   <variable name="user" type="com.myapp.User"/> 
</data>

在用户名/密码字段中,您需要为文本字段

引用此用户
<EditText
        android:id="@+id/userName"
        android:layout_width="220dp"
        android:layout_height="43dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="@={user.username}"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <EditText
        android:id="@+id/userPass"
        android:layout_width="220dp"
        android:layout_height="45dp"
        android:layout_marginTop="25dp"
        android:ems="10"
        android:inputType="textPassword"
        android:text="@={user.password}"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/userName"
        tools:layout_editor_absoluteX="74dp"
        tools:layout_editor_absoluteY="245dp"/>

请注意文本字段中的@ = {user.username}。对于类用户的每个属性,您需要指定一个setter / getter。 @ =表示,在此值更改时更新基础对象。

在“executePendingBindings”之前,您需要执行以下操作:

val user = User()
binding.setVariable(BR.user, user)
binding.executePendingBindings()
那么你应该好好去。